Common Desktop Environment: Style Guide and Certification Checklist

Navigation

Mouse-Based Navigation

 

n/a 

 

 

 

Required 

3-1: 

When the keyboard focus policy is explicit, pressing BSelect on a component moves focus to it, except for components, such as scroll bars, that are used to adjust the size and location of other elements.  

BSelect provides a convenient mechanism for using the mouse to move focus when the keyboard focus policy is explicit. 

Required 

3-2: 

When the pointer is on a menu, your application uses BSelect Press to activate the menu in a spring-loaded manner.  

A spring-loaded menu is one that appears when the user presses a mouse button, remains on the screen for as long as the button is pressed, and disappears when the user releases the button. BSelect, mouse button 1, provides a means of activating spring-loaded menus that is consistent across applications. 

Required 

3-3: 

When the pointer is in an element with an inactive pop-up menu and the context of the element allows the pop-up menu to be displayed, your application uses BMenu Press to activate the pop-up menu in a spring-loaded manner.  

The availability of a pop-up menu can depend on the location of the pointer within an element, the contents of an element, or the selection state of an element. BMenu, mouse button 3, provides a consistent means of activating a spring-loaded pop-up menu. 

Required 

3-4: 

If the user takes an action to post a pop-up menu, and a menu can be posted for both an inner element and an outer element that contains the inner element, the pop-up menu for the internal element is posted.  

This specification ensures that the pop-up menu for an internal element is always accessible. 

Required 

3-5: 

Once a pop-up menu is posted, BMenu behaves just as BSelect does for any menu system.  

The specified operation of BMenu is for manipulating pop-up menus. 

Required 

3-6: 

BSelect is also available from within posted pop-up menus and behaves just as in any menu system.  

Once a pop-up menu is posted, the user can select an element from it using the standard selection mechanism, BSelect. 

Required 

3-7: 

When a menu is popped up or pulled down in a posted manner, your application places the location cursor on the menu's default entry, or on the first entry in the menu if there is no default entry.  

A posted menu remains visible until it is explicitly unposted. Placing the location cursor on the default entry allows the user to select the default operation easily. When there is no default entry, placing the location cursor on the first entry yields uniform behavior across applications. 

Required 

3-8: 

Your application removes a spring-loaded menu system when the mouse button that activated it is released, except when the button is released on a cascading button in the menu hierarchy.  

The concept of a spring-loaded menu system requires that the menu disappear when the mouse button is released. 

Required 

3-9: 

While a spring-loaded menu system is popped up or pulled down, moving the pointer within the menu system moves the location cursor to track the pointer.  

Once a spring-loaded menu system has appeared on the screen, the user needs to be able to maneuver the location cursor through the menu system using the mouse. 

Required 

3-10: 

When a spring-loaded menu system is popped up or pulled down and the pointer rests on a cascading button, the associated menu is pulled down and becomes traversable. The associated menu is removed, possibly after a short delay, when the pointer moves to a menu item outside of the menu or its cascading button. 

The user needs to be able to use the mouse to access all of the associated menus of a menu system. This feature allows the user to move quickly to any menu in a menu system. 

Required 

3-11: 

When a spring-loaded menu system that is part of the menu bar is pulled down, moving the pointer to any other element on the menu bar unposts the current menu system and posts the pull-down menu associated with the new element.  

This feature of a spring-loaded menu system allows the user to browse quickly through all of the menus attached to a menu bar. 

Required 

3-12: 

When a spring-loaded menu system is popped up or pulled down, and the button that activated the menu system is released within a component in the menu system, that component is activated. If the release is on a cascading button or an option button, the associated menu is activated in a posted manner if it was not posted prior to the associated button press.  

Releasing the mouse button that activated a spring-loaded menu provides a means of activating a menu element that is consistent across applications. 

Required 

3-13: 

When the pointer is in an area with a pop-up menu, your application uses BMenu Click to activate the menu in a posted manner if it was not posted prior to the BMenu Click.  

BMenu Click provides a means of posting a pop-up menu that is consistent across applications. 

Required 

3-14: 

Once a pull-down or option menu is posted, BSelect Press in the menu system causes the menu to behave as a spring-loaded menu.  

This feature of a posted pull-down or option menu allows the user to switch easily between using a posted menu and a spring-loaded menu. 

Required 

3-15: 

If a button press unposts a menu and that button press is not also passed to the underlying component, subsequent events up to and including the button release are not passed to the underlying component.  

When a button press unposts a menu, the press can be passed to the underlying component. Whether or not it is passed to the underlying component, the press can have additional effects, such as raising and giving focus to the underlying window. If the press is not passed to the underlying component, events up to and including the release must not be passed to that component. 

Required 

3-16: 

Once a pop-up menu is posted, BSelect Press or BMenu Press in the menu system causes the menu to behave as a spring-loaded menu.  

This feature of a posted pop-up menu allows the user to switch easily between using a posted menu and a spring-loaded menu. 

Optional 

b: 

BMenu Press or BMenu Click on a menu bar item displays the menu. 

Required 

c: 

BMenu Press or BMenu Click on an option button displays the option menu. 

Required 

d: 

BSelect Press on a text field causes the text cursor to be inserted at the mouse cursor position. 

Keyboard-Based Navigation

 

n/a 

 

 

Required 

3-17: 

In a text component, the text cursor is shown differently when the component does and does not have the keyboard focus.  

In a text component, the text cursor serves as the location cursor and, therefore, must indicate whether the component has keyboard focus. 

Required 

3-18: 

If a text component indicates that it has lost the keyboard focus by hiding the text cursor and if the component subsequently regains the focus, the cursor reappears at the same position it had when the component lost focus.  

To ensure predictability, it is important that the text cursor not change position when a text component loses and then regains the keyboard focus. 

Required 

3-19: 

If a small component, such as a sash, indicates that it has the keyboard focus by filling, no other meaning is associated with the filled state.  

This rule reduces possible confusion about the significance of filling in a small component. 

Required 

3-20: 

All components are designed and positioned within your application so that adding and removing each component's location cursor does not change the amount of space that the component takes up on the screen.  

For visual consistency, the sizes and positions of components should not change when keyboard focus moves from one component to another. 

Required 

3-21: 

Control+Tab moves the location cursor to the next field, and Control+Shift+Tab moves the location cursor to the previous field. Unless Tab and Shift+Tab are used for internal navigation within a field, Tab also moves the location cursor to the next field, and Shift+Tab also moves the location cursor to the previous field.  

These keys provide a consistent means of navigating among fields in a window. 

Required 

3-22: 

Tab (if not used for internal navigation) and Control+Tab move the location cursor forward through fields in a window according to the following rules:  

  • If the next field is a control, Tab (if not used for internal navigation) and Control+Tab move the location cursor to that control.

  • If the next field is a group, Tab (if not used for internal navigation) and Control+Tab move the location cursor to a traversable component within the group.

  • If the next field contains no traversable components, Tab (if not used for internal navigation) and Control+Tab skip the field.

These rules ensure the consistent operation of Tab (if not used for internal navigation) and Control+Tab across applications. 

Required 

3-23: 

Shift+Tab (if not used for internal navigation) and Control+Shift+Tab move the location cursor backward through fields in the order opposite to that of Tab (if not used for internal navigation) and Control+Tab.  

These rules result in the uniform operation of Shift+Tab (if not used for internal navigation) and Control+Shift+Tab across applications. 

Required 

3-24: 

When a window acquires focus, the location cursor is placed on the control that last had focus in the window, providing that all the following conditions are met:  

  • The window uses an explicit keyboard focus policy.

  • The window acquires the focus through keyboard navigation or through a button press other than within the client area of the window.

  • The window had the focus at some time in the past.

  • The control that last had focus in the window is still traversable.

This rule ensures that when the user returns to a window after navigating away, the focus returns to the component where the user left it. 

Required 

3-25: 

Field navigation wraps between the first and last fields in the window.  

This feature of field navigation provides the user with a convenient way to move through all of the fields in a window. 

Required 

3-26: 

When the Down Arrow and Up Arrow keys are used for component navigation within a field, they behave according to the following rules:  

In a left-to-right language environment, the Down Arrow key moves the location cursor through all traversable controls in the field, starting at the upper left and ending at the lower right, then wrapping to the upper left. If the controls are aligned in a matrix-like arrangement, Down Arrow first traverses one column from top to bottom, then traverses the column to its right, and so on. In a right-to-left language environment, Down Arrow moves the location cursor through all traversable controls, starting at the upper right and ending at the lower left.  

  • Up Arrow moves the location cursor through all traversable controls in the field in the order opposite to that of Down Arrow.

These rules ensure a consistent means of navigating among components using the directional keys. 

Required 

3-27: 

When the Right Arrow and Left Arrow keys are used for component navigation within a field, they behave according to the following rules:  

  • In a left-to-right language environment, the Right Arrow moves the location cursor through all traversable controls in the field, starting at the upper left and ending at the lower right, then wrapping to the upper left. If the controls are aligned in a matrix-like arrangement, the Right Arrow first traverses one row from left to right, then traverses the row below it, and so on. In a right-to-left language environment, the Right Arrow moves the location cursor through all traversable controls, starting at the lower left and ending at the upper right.

  • Left Arrow moves the location cursor through all traversable controls in the field in the order opposite to that of the Right Arrow.

These rules ensure a consistent means of navigating among components using the directional keys. 

Required 

3-28: 

If a control uses the Right Arrow and Left Arrow for internal navigation, Begin moves the location cursor to the leftmost edge of the data or the leftmost element in a left-to-right language environment. In a right-to-left language environment, Begin moves the location cursor to the rightmost edge of the data or the rightmost element.  

This rule permits convenient navigation to the left or right edge of the data or the left or right element in a control. 

Required 

3-29: 

If a control uses the Right Arrow and Left Arrow keys for internal navigation, the End key moves the location cursor to the rightmost edge of the data or the rightmost element in a left-to-right language environment. In a right-to-left language environment, End moves the location cursor to the leftmost edge of the data or the leftmost element.  

This rule permits convenient navigation to the left or right edge of the data or the left or right element in a control. 

Required 

3-30: 

If a control uses the Up Arrow and Down Arrow keys for internal navigation, Control+Begin moves the location cursor to one of the following:  

  • The first element

  • The topmost edge of the data

  • In a left-to-right language environment, the topmost left edge of the data; in a right-to-left language environment, the topmost right edge of the data

This rule permits convenient navigation to the beginning of the data in a control. 

Required 

3-31: 

If a control uses the Up Arrow and Down Arrow keys for internal navigation, Control+End moves the location cursor to one of the following:  

  • The last element

  • The bottommost edge of the data

  • In a left-to-right language environment, the bottommost right edge of the data; in a right-to-left language environment, the bottommost left edge of the data

This rule permits convenient navigation to the end of the data in a control. 

Optional 

e: 

Each time a new window is opened, keyboard focus is placed in the first field or location within the window or in a default location, if this is appropriate for the particular window. 

Required 

f: 

The Tab key moves input focus between push buttons within a group. 

The arrow keys also move the selected focus per the OSF/Motif Style Guide, Revision 1.2.

Required 

g: 

Use the Control, Shift, and Alt keys only to modify the function of other keys or key combinations. 

Optional 

h: 

Use the Alt key only to provide access to mnemonics. 

Menu Traversal

 

n/a 

 

 

 

Required 

3-32: 

If the user traverses to a menu while the keyboard focus policy is implicit, the focus policy temporarily changes to explicit and reverts to implicit whenever the user traverses out of the menu system.  

Menus must always be traversable, even when the keyboard focus policy is generally implicit. 

Required 

3-33: 

Your application uses the F10 key to activate the menu bar system if it is inactive. The location cursor is placed on the first traversable cascading button in the menu bar. If there are no traversable cascading buttons, the key does nothing.  

F10 provides a consistent means of traversing to the menu bar using the keyboard. 

Required 

3-34: 

When the keyboard focus is in an element with an inactive pop-up menu and the context of the element allows the pop-up menu to be displayed, your application uses the menu key to activate the pop-up menu. The location cursor is placed on the default item of the menu, or on the first traversable item in the pop-up menu if there is no default item.  

The Menu key provides a uniform way of activating a pop-up menu from the keyboard. 

Required 

3-35: 

When the keyboard focus is in an option button, your application uses the Select key or the Spacebar to post the option menu. The location cursor is placed on the previously selected item in the option menu; or, if the option menu has been pulled down for the first time, the location cursor is placed on the default item in the menu. If there is an active option menu, the Return, Select, or Spacebar keys select the current item in the option menu, unpost the menu system, and return the location cursor to the option button.  

These keys provide a means of posting an option menu from the keyboard that is consistent across applications. 

Required 

3-36: 

Your application uses the Down Arrow, Left Arrow, Right Arrow, and Up Arrow keys to traverse through the items in a menu system. 

The Down Arrow, Left Arrow, Right Arrow, and Up Arrow directional keys provide a consistent means of navigating among items in a menu system. 

Required 

3-37: 

When a menu traversal action traverses to the next or previous component in a menu or menu bar, the order of traversal and the wrapping behavior are the same as that of the corresponding component navigation action within a field.  

This specification provides consistency between menu traversal and component navigation within a field. 

Required 

3-38: 

If your application uses any two-dimensional menus, they do not contain any cascading buttons.  

Cascading buttons in a two-dimensional menu would restrict the user's ability to navigate to all of the elements of the menu using the keyboard. 

Required 

3-39: 

When focus is on a component in a menu or menu bar system, the Down Arrow key behaves in the following way:  

  • If the component is in a vertical or two-dimensional menu, traverse down to the next traversable component, wrapping within the menu if necessary.

  • If the component is in a menu bar, and the component with the keyboard focus is a cascading button, post its associated pull-down menu and traverse to the default entry in the menu or, if the menu has no default, to the first traversable entry in the menu.

This rule results in consistent operation of the directional keys in a menu or menu bar system. 

Required 

3-40: 

When focus is on a component in a menu or menu bar system, the Up Arrow key behaves in the following way:  

If the component is in a vertical or two-dimensional menu, this action traverses up to the previous traversable component, wrapping within the menu if necessary, and proceeding in the order opposite to that of the Down Arrow key. 

This rule results in consistent operation of the directional keys in a menu or menu bar system. 

Required 

3-41: 

When focus is on a component in a menu or menu bar system, the Left Arrow key behaves in the following way: 

  • If the component is in a menu bar or two-dimensional menu, but not at the left edge, traverse left to the previous traversable component.

  • If the component is at the left edge of a menu bar, wrap within the menu bar.

  • If the component is at the left edge of a vertical or two-dimensional menu that is the child of a vertical or two-dimensional menu, unpost the current menu and traverse to the parent cascading button.

  • If the component is at the left edge of a vertical or two-dimensional menu that is the child of a menu bar, unpost the current menu and traverse left to the previous traversable entry in the menu bar. If that entry is a cascading button, post its associated pull-down menu and traverse to the default entry in the menu or, if the menu has no default, to the first traversable entry in the menu.

This rule results in consistent operation of the directional keys in a menu or menu bar system. 

Required 

3-42: 

When focus is on a component in a menu or menu bar system, the Right Arrow key behaves in the following way:  

  • If the component is a cascading button in a vertical menu, post its associated pull-down menu and traverse to the default entry in the menu or, if the menu has no default, to the first traversable entry in the menu.

  • If the component is in a menu bar or two-dimensional menu, but not at the right edge, traverse right to the next traversable component.

  • If the component is at the right edge of a menu bar, wrap within the menu bar.

  • If the component is not a cascading button and is at the right edge of a vertical or two-dimensional menu, and if the current menu has an ancestor cascading button (typically in a menu bar) from which the Down Arrow key posts its associated pull-down menu, unpost the menu system pulled down from the nearest such ancestor cascading button and traverse right from that cascading button to the next traversable component. If that component is a cascading button, post its associated pull-down menu and traverse to the default entry in the menu or, if the menu has no default, to the first traversable entry in the menu.

This rule results in consistent operation of the directional keys in a menu or menu bar system. 

Required 

3-43: 

All menu traversal actions, with the exception of menu posting, traverse to tear-off buttons in the same way as for other menu entries.  

Traversal of tear-off buttons needs to be consistent with traversal of other menu items. 

Required 

3-44: 

If your application uses the F10, Menu, or Cancel key to unpost an entire menu system and an explicit focus policy is in use, the location cursor is moved back to the component that had it before the menu system was posted.  

Returning the location cursor to the component that had it previously allows the user to resume a task without disruption. 

Scrollable Component Navigation

 

n/a 

 

 

 

Required 

3-45: 

Any scrollable components within your application support the appropriate navigation and scrolling operations. Your application uses the page navigation keys Page Up, Page Down, Control+Page Up (for Page Left), and Control+Page Down (for Page Right) for scrolling the visible region by a page increment. 

A user needs to be able to view and access the entire contents of a scrollable component. 

Required 

3-46: 

When scrolling by a page, your application leaves at least one unit of overlap between the old and new pages.  

The overlap between one page and the next yields visual continuity for the user. 

Required 

3-47: 

Any keyboard operation that moves the cursor to or in the component, or that inserts, deletes, or modifies items at the cursor location scrolls the component so that the cursor is visible when the operation is complete.  

The user needs to be able to see the results of moving the location cursor or operating on the contents of the scrollable component. 

Required 

3-48: 

If a mouse-based scrolling action is in progress, the Cancel key cancels the scrolling action and returns the scrolling device to its state prior to the start of the scrolling operation. 

The Cancel key provides a convenient way for the user to cancel a scrolling operation.