This section describes the processing that occurs for the input focus events
FocusIn
and
FocusOut.
The X server can report
FocusIn
or
FocusOut
events to clients wanting information about when the input focus changes.
The keyboard is always attached to some window
(typically, the root window or a top-level window),
which is called the focus window.
The focus window and the position of the pointer determine the window that
receives keyboard input.
Clients may need to know when the input focus changes
to control highlighting of areas on the screen.
To receive
FocusIn
or
FocusOut
events, set the
FocusChangeMask
bit in the event-mask attribute of the window.
The structure for these event types contains:
typedef struct {
int type; /* FocusIn or FocusOut */
unsigned long serial; /* # of last request processed by server */
Bool send_event; /* true if this came from a SendEvent request */
Display *display; /* Display the event was read from */
Window window; /* window of event */
int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */
int detail;
/*
* NotifyAncestor, NotifyVirtual, NotifyInferior,
* NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer,
* NotifyPointerRoot, NotifyDetailNone
*/
} XFocusChangeEvent;
typedef XFocusChangeEvent XFocusInEvent;
typedef XFocusChangeEvent XFocusOutEvent;
The window member is set to the window on which the
FocusIn
or
FocusOut
event was generated.
This is the window used by the X server to report the event.
The mode member is set to indicate whether the focus events
are normal focus events,
focus events while grabbed,
focus events
when a grab activates, or focus events when a grab deactivates.
The X server can set the mode member to
NotifyNormal,
NotifyWhileGrabbed,
NotifyGrab,
or
NotifyUngrab.
All
FocusOut
events caused by a window unmap are generated after any
UnmapNotify
event; however, the X protocol does not constrain the ordering of
FocusOut
events with respect to
generated
EnterNotify,
LeaveNotify,
VisibilityNotify,
and
Expose
events.
Depending on the event mode,
the detail member is set to indicate the notify detail and can be
NotifyAncestor,
NotifyVirtual,
NotifyInferior,
NotifyNonlinear,
NotifyNonlinearVirtual,
NotifyPointer,
NotifyPointerRoot,
or
NotifyDetailNone.