Keyboard navigation support for all apps from the SDK

Registered by Luke Yelavich

Implementing keyboard navigation for core apps and 3rd-party apps in a way that requires the least amount of work from the app developer.

Blueprint information

Not started
Luke Yelavich
Needs approval
Series goal:
Milestone target:

Related branches



Keyboard navigation is an important part of the user experience, particularly in a converged environment. Good keyboard navigation can benefit everybody, whether they use assistive technologies, or are every day power users.

Many GUI toolkits have keyboard functionality in place to allow a keyboard user to move from widget to widget in a defined order, and many GUI toolkits implement keyboard navigation for free, within widgets, without an app developer needing to add any extra code. It is desirable to offer the same functionality through the SDK, and allow extension or altering of keyboard navigation if an app developer desires it.

GTK offers the following for keyboard users:
 * GTK automatically computes the cycling between widgets with the tab and shift + tab keys. App developers can overwrite the focus order if they wish.
* GTK allows sliders to be adjusted using arrow keys, page up/down, and home/end keys.
* GTK allows the navigation of tree views, tables, and list boxes with arrow keys. Tree views can be expanded and contracted with + and - keys.
* GTK allows the opening of combo boxes with Alt + Down arrow keys. The combo box can then be closed using Alt + Up arrow, or escape.
* GTK has default buttons for dialog boxes, such that when enter is pressed, the default button is activated regardless of whether it currently has focus.
* If a widget such as a table or tree view is not entirely shown on screen, GTK allows the use of Control + Left/Right arrow keys to scroll the widget to allow the rest of its contents to be seen, this is only relevant for horrizontal scrolling.
* The space bar can be used to activate buttons, toggle switches, and toggle checkboxes.
* It is possible to navigate between pages in a GTK notebook with Control + Page Up/Down keys.
* GTK allows text labels to be focusable, which in turn allows users to tab to the label with the keyboard. THe label can then be manipulated just like any read-only text field. This is most useful for screen reader users, who wish to be able to read such text messages. This is less common in newer GNOME apps, however.

Points of discussion:
* Design guidelines need to be discussed and written to emphasize the benefits of using the widgets defined in the Ubuntu SDK with regards to keyboard navigation of apps for a converged environment.
* Determine how much work would be required in the SDk to provide some form of automagic keyboard navigation between focusable widgets in an application written in QML, with a way for the app dev to overwrite this behavior if they wish.
* Determine what widgets we want to consider as being keyboard focusable, and enable them as keyboard navigable.
* Assess the elements that make up such widgets as lists, as it should be possible to navigate through lists with the keyboard, and have a visual indicator to show the currently selected item in a list.
* Implement something along the lines of the default button concept. This will be useful in popover windows that may have more than one button to choose from, and the recommended action should be executable with the enter key.
* Enable the user to navigate to the toolbar of an app with the keyboard. In Gedit this is performed with Control + tab, but other applications also use F6 to move between widget groups on screen, Thunderbird and LibreOffice come to mine.


Work Items

This blueprint contains Public information 
Everyone can see this information.


No subscribers.