https://invisible-island.net/xterm/xtoolkit/
XtSetKeyboardFocus - focus events on a child widget
#include <X11/Intrinsic.h> void XtSetKeyboardFocus(Widget subtree, Widget descendant);
subtree Specifies either the widget in the subtree structure which is to receive the keyboard event, or None. Note that it is not an error to specify None when no input focus was previously set. descendant Specifies the widget for which the keyboard focus is to be set.
If a future KeyPress or KeyRelease event occurs within the specified subtree, XtSetKeyboardFocus causes XtDispatchEvent to remap and send the event to the specified descendant widget. When there is no modal cascade, keyboard events can occur within a wid- get W in one of three ways: o W has the X input focus. o W has the keyboard focus of one of its ancestors, and the event occurs within the ancestor or one of the ancestor's descendants. o No ancestor of W has a descendant within the keyboard focus, and the pointer is within W. When there is a modal cascade, a widget W receives keyboard events if an ancestor of W is in the active subset of the modal cascade and one or more of the previous conditions is True. When subtree or one of its descendants acquires the X input focus or the pointer moves into the subtree such that keyboard events would now be delivered to subtree, a FocusIn event is generated for the descen- dant if FocusNotify events have been selected by the descendant. Simi- larly, when W loses the X input focus or the keyboard focus for one of its ancestors, a FocusOut event is generated for descendant if FocusNo- tify events have been selected by the descendant.
XtCallAcceptFocus(3) X Toolkit Intrinsics – C Language Interface Xlib - C Language X Interface X Version 11 libXt 1.1.5.2 XtSetKeyboardFocus(3)