there would be no way to insert a tab character.) To traverse the tab groups in reverse, the SHIFT key is used with the
TAB key. Keyboard traversal wraps from the last item to the first item, both within a tab group and between tab
groups.
Although keyboard traversal is not completely controlled by manager widgets, they do play a pivotal role in
implementing it. A manager widget is typically initialized as a tab group; its primitive widget children are members of
the tab group. The Text and List widgets are exceptions to this rule. These widgets are set up as their own tab groups,
so that keyboard traversal can be used to move among the text in a Text widget or the items in a List widget. Within a
tab group, there is no sense of a manager−within−manager structure. The widget hierarchy is flattened out so that it
appears to the user that all of the controls in a window are at the same level.
Keyboard traversal only works if each widget in an interface cooperates. If a PushButton has the keyboard focus and
the user presses the TAB key, the internals of the PushButton widget are responsible for directing the focus to the next
tab group. Manager widgets play a key role in keyboard traversal because they are responsible for the keyboard events
that take place within gadgets. If an event occurs within a PushButton gadget, its manager parent is responsible for
directing the input focus to the next tab group.
Although the whole process of keyboard traversal may seem complex and difficult, it is automated ...