NULL);
XtOverrideTranslations (pb, XtParseTranslationTable ("<Key>Tab: do_tab"));
The translation table is merged into the existing translations for the PushButton widget. This translation table does not
interfere with the translation table in the manager widget, but it does interfere with event propagation to the manager.
When the TAB key is pressed, the action routine do_tab() is called and the event is consumed by the PushButton
widget. The event is not propagated up to the manager widget so that it can perform the appropriate keyboard traversal
action. The workaround for this problem is to have do_tab() process the keyboard traversal action on its own, in
addition to performing its own action. This technique is discussed in the next section.
Since a manager can also contain gadgets, the manager widget must also handle input that is destined for gadgets.
Since gadgets do not have windows, they cannot receive events. Only the manager widget that is the parent of a
gadget can receive events for the gadget. The manager widget has the following additional translations to handle input
on behalf of gadgets:
<Key>osfActivate: ManagerParentActivate()
<Key>osfCancel: ManagerParentCancel()
<Key>osfSelect: ManagerGadgetSelect()
<Key>osfHelp: ManagerGadgetHelp()
~Shift ~Meta ~Alt <Key>Return: ManagerParentActivate()
~Shift ~Meta ~Alt <Key>space: ManagerGadgetSelect()
<Key>: ManagerGadgetKeyInput()
<BtnMotion>: ManagerGadgetButtonMotion()
<Btn1Down>: ManagerGadgetArm()
<Btn1Down>,<Btn1Up>: ManagerGadgetActivate() ...