11.9 Filtering Events
An input method needs to receive X events other than keystrokes.
It must receive expose events when its Preedit or Status areas need
refreshing, it needs mouse button events if it is to support
full-featured editing of pre-edit text, and it needs mouse motion events
if it implements popup menus. The input method needs to get first crack
at these events, but will not always be able to intercept them directly
from the server, so the application is responsible for passing all
events to the input method before processing them itself. This is done
with the function XFilterEvent()
. It should be called
from the event loop of all internationalized applications, generally
right after XNextEvent()
.
XFilterEvent()
takes two arguments, the event to
filter, and the window to which the event is directed. If the
application (or a toolkit used by the application) performs event
redirection, this window may not be the same as the window in which the
event occurred. If the window argument is None
, the
window of the event will be used. An application cannot know in advance
which events the IM will need to filter; it must pass all events to
XFilterEvent()
. If XFilterEvent()
returns True
, it filtered the event the application
should dispatch the event no further.
Remember that an input method may be interested in different types
of events than the application is. If the application is to pass events
to the input method through XFilterEvent()
, the application must have registered ...
Get XLIB Programming Manual, Rel. 5, Third Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.