Keyboard Navigation for GNOME 2.0 (Draft)

Contents > GTK Widgets > Lists and Trees

Combo Box (testgtk, "entry")

GtkCombo should also support the currently-enforced shortcuts for Cut, Copy and Paste in its entry field, whatever those might be-- they might be taken from the current keyboard theme, or they may have been over-ridden on the current application's Edit menu by the user re-assigning them dynamically at runtime.  Which should take priority in this case?

Status at 8-Jan-02:  Ctrl-X, Ctrl-C and Ctrl-V work in combo box field as expected, that's probably clever enough for now.

 
Java
JComboBox
MSWin
CComboBox
Gtk 1.2.9
GtkCombo
Gtk Proposed
Bug #53579
Status at
8-Jan-02

Bugzilla Patch? NO

Navigate in - Tab  Navigate in - Tab, or Alt+mnemonic Navigate in - Tab, arrow keys, or Alt+mnemonic
Navigate in - Tab, or Alt+mnemonic
OK
Navigate out - Tab, Shift+Tab (reverses direction) Navigate out - Tab, Shift+Tab (reverses direction) Navigate out - Tab, Shift+Tab, arrow keys.
Navigate out - Tab
OK
Drop down list - Alt+Down arrow Drop down list - Alt+Down arrow or F4.  Drop down list- Enter.
Drop down list - Ctrl+Down Arrow (for consistency with notebook keynav)
Ctrl+Down arrow: Not implemented, still uses Enter.  Enter should do whatever pressing enter in a regular GtkEntry box does-- i.e. either activate the window's default button or move the focus to the next control, depending on the value of the  widget's 'activates default button' flag.
Roll up list - Esc Roll up list - Alt+Up arrow or F4. Roll up list- Esc.
Roll up list - Esc or Ctrl+Up Arrow
Esc: OK

Ctrl+Up Arrow : not implemented

Default or selected action - Enter (rolls up list) Default or selected action - Enter (rolls up list) Default or selected action - Enter (rolls up list) Select from list- Enter  OK
Navigate within list - Arrow keys Navigate within list- Arrow keys, Home, End; additionally Shift+F8 in multi-selection boxes. Navigate within list- Arrow keys, PgUp, PgDn. (Selects while navigating).
Navigate within list- Arrow keys, PgUp, PgDn, Home, End. 

Ctrl+PgUp/PgDn - scroll list left/right, if required.

Focus should not wrap around, system warning beep should sound whenever user tries to move focus past beginning or end of list.

Arrow keys - OK, wraparound beep TBD

PgUp,PgDn - OK,wraparound beep TBD

Home, End - Not implemented, currently they scroll the list left/right., but left/right arrow keys already do this as well, which is probably fine.  (For consistency with other scrolled areas, though, Ctrl+PgUp/PgDn should scroll list left/right as well, or instead).
 

Select from list - Enter Select from list - Enter, Spacebar, Home, End or any printing character for single-selection boxes; additionally Ctrl/Shift+Up/Down, Ctrl/Shift+Space, Ctrl/Shift+Home/End in multi-selection boxes. Select from list - Enter, PageUp, PageDn. Multi-selection not supported. Select from list- 

Enter or Spacebar, PageUp to select item at top of this then previous page, PageDn to select item at bottom of this then next page, Home to select first item in list, End to select last item in list, any printing character to select next item in list starting with that character.

If selection is attempted beyond the current bounds of the field's contents, system warning beep should be sounded.

Enter : OK

Spacebar: Not implemented

PgUp/PgDn: OK

Home/End: Not implemented, currently they scroll list left/right (see previous note)

Wraparound beep - TBD

Cycle thru entries without posting menu - Up/Down Arrow Keys Cycle thru entries without posting menu - Up/Down Arrow Keys Cycle thru entries without posting menu - Up/Down Arrow Keys... but when you reach first or last entry, arrow keys revert to navigation controls and focus moves to the previous or next control instead. Cycle thru entries without dropping down list- Up/Down Arrow Keys, PgUp/Dn, Home/End.

When last entry is selected and Down Arrow is pressed, or first entry is selected and Up Arrow is pressed, system warning beep should sound rather than wrapping around.

Up/Down arrow: Broken; still move focus after first or last entry in list reached

PgUp/PgDn/Home/End: Not implemented

Listbox (gtk-demo, "list store";  testtreeedit)

 
Java
JList
MSWin
CListBox
Gtk 1.2.9
GtkList
Gtk Proposed
GtkTreeView
Bug #53580
Status at
8-Jan-02

Bugzilla Patch? NO

Navigate in - Tab Navigate in - Tab or Alt+mnemonic Navigate in - Tab, Alt+mnemonic or arrow keys.
Navigate in - Tab or Alt+mnemonic, give focus to header first if present, then list body with further Tab
OK, but currently no way to give list headers focus (using jrb's latest testreeview prog)
Navigate out - Tab, Shift+Tab (reverses direction) Navigate out - Tab, Shift+Tab (reverses direction) Navigate out- Tab, Alt+mnemonic, or Ctrl+Arrowkeys. 
Navigate out - Tab, Alt+mnemonic
OK
Navigate within -

 
 

U/D Arrow = Move up/down one row or line, list scrolls if necessary to show newly focused line 

PgUp, PgDn = Move up/down one view minus one line, the first line in view gets selection 

Home, Ctrl+home = move to beginning of list 

End, Ctrl+End = move to end of list

Navigate within - 

U/D arrow = Move up/down one row or line; list scrolls if necessary. Selects in extended selection listbox, moves focus only in multi-selection listbox. 

PgUp, PgDn = Move up/down one view minus one line. First line in view gets focus (MS listbox) or selection (ES listbox). 

Home, Ctrl+home = move focus/selection to beginning of list 

End, Ctrl+end = move focus/selection to end of list 

Printable character = cycle focus/selection through list items that start with that character 

Alt+Up/Down or F4 to show/hide list (dropdown lists only)

Navigate within - 

U/D arrow = Move up/down one row or line, list scrolls if necessary to show newly-focused line. 

PgUp, PgDn = Move up/down one view minus one line, the first line in view gets selection 

Enter to show/hide dropdown (dropdown lists only)

Navigate within - 
Up/Down Arrow = Move up/down one row or line, list scrolls if necessary to show newly focused line 
PgUp, PgDn = Move up/down one view minus one line, the first line in view gets selection 

Home, Ctrl+home = move to beginning of list 

End, Ctrl+End = move to end of list

Focus should not wrap around, system warning beep should sound whenever user tries to move focus past beginning or end of list.

Up/Down arrow: OK

PgUp/PgDn:  broken-- first press on PgDn is moving focus one line too far, i.e. it's scrolling when it shouldn't, and PgUp seems to be moving to first item in list rather than first in current view.  Also PgDn seems to "stick" sometimes, e.g. when focus hits Row 8 in jrb's testtreeview prog

Home, End: OK

Wraparound:  Focus move is OK, system beep TBD

Selection (assumes list enables multiple selections) - 

Ctrl+A = Select all 

Spacebar = make a selection, deselects previous selection 

Ctrl+Spacebar = Discontiguous extension, doesn't affect previous selection 

Shift+spacebar = contiguous selection, extends selection from previous selection point 

Shift+down = extend selection down 

Shift+up = extend selection up 

Shift+home = extend selection to beginning of list 

Shift+end = extend selection to end of list 

Shift+page down = extend selection down one view 

Shift+page up = extend selection up one view

Selection - 

Spacebar = make a selection. Deselects previous selection only in extended-selection listbox, not in multiple selection listbox. 

Ctrl+Spacebar = Discontiguous extension, doesn't affect previous selection

Shift+spacebar = contiguous selection, extends selection from previous selection point 

Shift+down = extend selection down

Shift+up = extend selection up 

Shift+home = extend selection to beginning of list 

Shift+end = extend selection to end of list 

Shift+page down = extend selection down one view 

Shift+page up = extend selection up one view

Selection - 

In single selection listbox, selection follows navigation. 

Haven't had a chance to check multi-selection listboxes yet, assuming gtk has such a thing...

Selection (assumes list enables multiple selections) - 

Ctrl+A , Ctrl+/= Select all 

Shift+Ctrl+A, Ctrl+\ = Deselect all

Spacebar = make a selection, deselects previous selection 

Ctrl+Spacebar = Discontiguous extension, doesn't affect previous selection 

Shift+spacebar = contiguous selection, extends selection from previous selection point 

Shift+down = extend selection down 

Shift+up = extend selection up 

Shift+home = extend selection to beginning of list 

Ctrl+home =  focus and add first item in list to discontiguous selection

Shift+end = extend selection to end of list 

Ctrl+End = focus and add last item in list to discontigous selection

Shift+page down = extend selection down one view 

Shift+page up = extend selection up one view 

Ctrl+PgUp/PgDn = select and move focus to top/bottom of view, then top/bottom of previous/next view on subsequent press 

Printable character string = select next visible item in list starting with that string (single-selection tree only) 

Printable character = select next visible item in list starting with that character (single-selection tree only)

If selection is attempted beyond the current bounds of the field's contents, system warning beep should be sounded.

Ctrl+A : OK

Ctrl+/ : Not implemented

Shift-Ctrl-A:  Not implemented

Ctrl+\: Not implemented

Spacebar:  not implemented- but jrb has implemented a different model where moving focus also moves selection by default, and you hold down Ctrl+arrow to move the focus without selecting.  This allows the same range of functionality as the proposal; however there is a possible usability issue as this way it's much easier to clear a carefully-composed multiple selection by mistake when trying to add a new item.

Non-keynav problem:  when making a multiple selection with the mouse (shift/ctrl+click), the focus indicator currently disappears

Ctrl+Spacebar: OK, within the context of the model jrb has chosen

Shift+Spacebar: OK

Shift+Up/Down: OK

Shift+Home/End:   Broken-- currently only moves focus to first/last item, doesn't extend selection

Ctrl+Home/End: Broken-- currently deselects your current selection first

Shift+PgDn:  Almost works, but initial press scrolls one line too far as mentioned above

Shift+PgUp:  Broken-- currently does what Shift+Home is supposed to do

Ctrl+PgUp/Dn:  Broken, PgUp takes you to first item in list instead of top item in view, and PgDn moves focus down one line too many.  (N.B. Within the context of jrb's model, only focus should move, rather than automatically adding newly-focused item to selection as proposed)

Printable character string-- not implemented, jrb has chosen to implement an interactive search box instead, by pressing Ctrl-S.  This is better in that it supports input of international characters more readily, but perhaps isn't as intuitive.  Typing into this box also causes the list to unnecessarily scroll around a lot, presumably just a bug.

Out of bounds selection: TBD, not sure if it beeps or not...

Re-order columns: 
not currently possible
Re-order columns: not currently possible Re-order columns: not currently possible Re-order columns: when column header has keyboard focus:

Ctrl+left/right arrow moves column one position left/right

Ctrl+Home/End moves column to first/last position in list/table header.

Not currently implemented
Re-size columns: not currently possible
Re-size columns: not currently possible
Re-size columns: not currently possible Shift+left/right arrow makes column narrower/wider (should adjust right edge of column if possible, otherwise left edge) Not currently implemented
Activate column header (same as clikcking): not currently possible Activate column header (same as clikcking): not currently possible Activate column header (same as clikcking): not currently possible Spacebar Not currently implemented -  currently implements Enter, but this should be used for activating default button in window, if there is one
Edit cell: not currently possible Edit cell: select cell and press Enter Edit cell: not currently possible Edit cell: select cell and press Spacebar; Enter confirms changes, Esc cancels OK
Activate selection (same as dbl-click): Enter Activate selection (same as dbl-click): Enter Activate selection (same as dbl-click): Enter Activate selection (same as dbl-click): Enter Enter: TBD

 
 

Tree (gtk-demo, "tree store"; testtreeview)

 
Java
JTree
MSWin32
CTreeCtrl
Gtk1.2.9
GtkTree
Gtk Proposed
GtkTreeView
Bug #53580
Status at
8-Jan-02

Bugzilla Patch? NO

Navigate in - Tab  Navigate in - Tab, or Alt+mnemonic Navigate in - Tab, or Alt+mnemonic, give focus to header first if present, then list body with further Tab
Navigate in - Tab, or Alt+mnemonic
OK, but currently no way to give list headers focus (all header functionality e.g. sorting, re-ordering seems to have been temporarily removed however)
Navigate out - Tab, Shift+Tab (reverses direction) Navigate out - Tab, Shift+Tab (reverses direction) Navigate out - Tab, Shift+Tab (reverses direction)
Navigate out - Tab, or Alt+mnemonic
OK
Expand hierarchy - R Arrow Key Expand hierarchy- right arrow opens one branch, asterisk (on keypad) expands all branches under selected branch. 

Plus sign (on keypad) expands everything under current selection back to previously-opened state, or opens only one level if it has not previously been opened.

Expand branch - plus key (+) on keyboard or keypad expands selected branch. 

 

Expand selected branch- "+"  on keyboard or keypad

Expand selected branch and all children - Shift+right arrow, or Shift+"+" (keypad) 
 

"+" : OK

Shift+"+": TBD

Contract hierarchy - L Arrow Key Contract hierarchy - left arrow closes selected branch, minus sign (on keypad) closes all branches under current selection. Collapse branch - minus key (-) on keyboard only collapses selected branch. Minus key on keypad has no effect. Collapse selected branch - left arrow or "-" 
Collapse selected branch and all children - Shift+left arrow, or Shift+"-" (keypad). 
"-": works on keyboard only, not keypad
Navigate within -

 
 

U/D Arrow = Move focus up/down one tree element 

home = move focus to first element in tree, view is changed to show first element 

end = move focus to last element in tree, view is changed to show first element 

PgUp, PgDn = Move up/down one JViewport view, first/last focusable element in view gets focus 

Ctrl+page down = move right one JViewport view, last focusable component in view gets focus 

Ctrl+page up = move left one JViewport view, first focusable component in view gets focus

Navigate within - 

U/D arrow = select next visible object above or below current selection. 

Page Up/Dwn = selects the top or bottom object currently visible. Press a second time to move up or down one screen. 

Home/End = select first or last item in the tree. 

Any printing character = select next item in tree with specified name or initial letter. Repeating the character selects successive items beginning with the same character. 

Backspace = select the parent of the currently selected item.

Navigate within- 

U/D arrow = move to or select next visible object above or below current selection. (Is the move/select choice decided by the programmer? Different gtk apps seem to behave differently here). 

Page Up/Dwn = moves to or selects the top or bottom object currently visible. Press a second time to move up or down one screen. 

Ctrl+Home, Ctrl+End = move to or select first or last visible item in tree.

Navigate within - 

(NB: Keyboard focus box should be visible at all times)

Up/Down arrow = move keyboard focus to next visible object above or below current selection (in same or different row, as appropriate), selecting that object's row if tree only allows single-selection.   See  also (*) below.

Left/Right arrow = move keyboard focus to next/previous focusable object in selected row.  Don't wrap around but play system warning beep if attempt to move focus off either end.

Page Up/Dwn = move focus to the top or bottom row currently visible. Press a second time to move up or down one screen.   Select and highlight rows if tree only allows single-selection.  See (*) below.

Home/End = move keyboard focus to first or last visible item in the tree.   Selects that row if tree is single-selection only.

Any printing character = move keyboard focus to next visible item in tree with specified name or initial letter, selecting its row if tree is single-selection only. Repeating the character moves focus to successive items beginning with the same character. 

Backspace = move keyboard focus to the parent of the currently selected item.  Selects that row if tree is single-selection only.

Focus should not wrap around, system warning beep should sound whenever user tries to move focus past beginning or end of tree, or the beginning or end of an indvidual row. 

---

(*)  When moving keyboard focus to a different row, and that row has no selectable object in the same column as focus has just come from, then there's potentially 4 things we could do:

i) Just assume there is a blank cell at that position in that row, and focus that

ii) skip focus to the next row that has a focusable object in the correct column;

iii) move focus to the leftmost selectable object in the previous/next row that contains any selectable objects;

iv) move focus to the previous/next row, and to the object in column f in that row, where f is the largest number such that 1<=f<n, and n is the column number from which focus has moved.  (A picture would help!)
 

Up/Down arrow: focus move OK, system beep TBD.  implemented such that all rows have same no. of colums, even if some cells empty.  Also see notes on listboxes in table above-- jrb has implemented a different model for multiple selections than that proposed, which provides same functionality but may prove bothersome.

Left/Right arrow:  moves focus OK, warning beep TBD.

PgUp/PgDn:  broken-- first press on PgDn is moving focus one line too far, i.e. it's scrolling when it shouldn't, and PgUp seems to be moving to first item in list rather than first in current view.

Home, End: OK

Printable character string-- not implemented, jrb has chosen to implement an interactive search box instead, by pressing Ctrl-S.  This is better in that it supports input of international characters more readily, but perhaps isn't as intuitive.  Typing into this box also causes the list to unnecessarily scroll around a lot, presumably just a bug.

Backspace: OK, within context of jrb's model
 

Selection - 

Ctrl+/ = Select all 

Ctrl+\ = De-select all 

Shift+down = extend selection down 

Shift+up = extend selection up 

Shift+home = extend selection to beginning of data 

Shift+end = extend selection to end of data 

Shift+page down = extend selection down one view 

Shift+page up = extend selection up one view 

Ctrl+Shift+page down = extend selection right one view 

Ctrl+Shift+page up = extend selection left one view

Selection - 

The Win32 tree view only supports single selection of items. Navigation keys therefore control selection as well. 

 

Selection - 

Shift+down = extend selection down 

Shift+up = extend selection up 

Shift+Ctrl+home = extend selection to beginning of data 

Shift+Ctrl+end = extend selection to end of data 

Shift+page up/down = extend selection to first/last currently-visible item. Use again to extend selection to beginning of previous page/end of next page.

Selection - 

Single-selection trees: 

- Ctrl+Spacebar = toggle selection of row with current keyboard focus. 

Printable character = focus next visible item in tree starting with that character, and select its row. 

Printable character string = focus next visible item in tree starting with that string, and select its row.

---

Multi-selection trees:

Ctrl+A, Ctrl+/= Select all 

Shift+Ctrl+A, Ctrl+\= De-select all

Spacebar = select currently-focused item's row, deselect all other rows.   If the focused item is activatable (eg checkbox), activate it at the same time.

Ctrl+Spacebar = toggle selection state of currently-focused item's row.  Doesn't affect selection state of any other rows, and doesn't activate the currently-focused item if it activatable (eg checkbox).

Shift+Spacebar = extend row selection from last selected row to this one. 

Shift+down = Move keyboard focus to next row, and extend selection to include that row.  See (*) above.

Shift+up = Move keyboard focus to previous row, and extend selection to include that row.  See (*) above.

Shift+home = move keyboard focus to first selectable object in tree, and select that and all intervening rows.

Shift+end = move keyboard focus to last selectable object in tree, and select that and all intervening rows. 

Shift+page up/down = move keyboard focus to first/last currently-visible row, selecting that and all intervening rows. Use again to extend selection to beginning of previous page/end of next page.   See (*) above. 

Printable character = focus next visible item in tree starting with that character. No additional rows are selected. 

Printable character string = focus next visible item in tree starting with that string.  No additional rows are selected.

If selection  is attempted beyond the current bounds of the field's contents, system warning beep should be sounded.

Single-selection trees:

Ctrl+Spacebar:  OK

Printable character: not implemented, uses Ctrl-S to popup search box

---

Multi-selection trees:

Ctrl-A: OK
Ctrl+/ : Not implemented

Shift-Ctrl-A:  Not implemented

Ctrl+\: Not implemented

Spacebar: Almost works within context of jrb's selection model, but doesn't select row if focused cell contents are activatable (e.g. checkbox)- only activates cell contents.

Ctrl-Spacebar: OK within context of jrb's model

Shift+Spacebar: OK

Shift+Up/Down: OK

Shift+Home/End:   Broken-- currently only moves focus to first/last item, doesn't extend selection

Ctrl+Home/End: Broken-- currently deselects your current selection first

Shift+PgDn:  Almost works, but initial press scrolls one line too far as mentioned above

Shift+PgUp:  Broken-- currently does what Shift+Home is supposed to do

Ctrl+PgUp/Dn:  Broken, PgUp takes you to first item in list instead of top item in view, and PgDn moves focus down one line too many.  (N.B. Within the context of jrb's model, only focus should move, rather than automatically adding newly-focused item to selection as proposed)

Printable character string-- not implemented, jrb has chosen to implement an interactive search box instead, by pressing Ctrl-S.  This is better in that it supports input of international characters more readily, but perhaps isn't as intuitive.  Typing into this box also causes the list to unnecessarily scroll around a lot, presumably just a bug.

Out of bounds selection: TBD, not sure if it beeps or not...
 
 

 

Re-order columns: 
not currently possible
Re-order columns: 
not currently possible
Re-order columns: 
not currently possible
Re-order columns: when column header has keyboard focus:

Ctrl+left/right arrow moves column one position left/right

Ctrl+Home/End moves column to first/last position in list/table header.

Not currently implemented
Re-size columns: 
not currently possible
Re-size columns: 
not currently possible
Re-size columns: 
not currently possible
Shift+left/right arrow makes column narrower/wider (should adjust right edge of column if possible, otherwise left edge) Not currently implemented
Activate column header (same as clikcking): not currently possible Activate column header (same as clikcking): not currently possible Activate column header (same as clikcking): not currently possible Spacebar Not currently implemented -  currently implements Enter, but this should be used for activating default button in window, if there is one
Edit cell: not currently possible Edit cell: select cell and press Enter; Enter confirms changes, Esc cancels Edit cell: not currently possible Edit cell: select cell and press Spacebar; Enter confirms changes, Esc cancels OK
Activate selection (same as dbl-click): Enter Activate selection (same as dbl-click): Enter Activate selection (same as dbl-click): Enter Activate selection (same as dbl-click): Enter Enter: TBD

 

Users · Developers · ViewCVS · FTP · Bugzilla · Software Map · Contact