Previous: Without Object Sets, Up: Using SERVE-EVENT with the CLX Interface to X [Contents][Index]
This section discusses the use of object sets and
system:serve-event
to handle CLX events. This is necessary
when a single X application has distinct windows that want to handle
the same events in different ways. Basically, you need some way of
asking for a given window which way you want to handle some event
because this event is handled differently depending on the window.
Object sets provide this feature.
For each CLX event-key symbol-name XXX (for example,
key-press), there is a function serve-
XXX of two
arguments, an object set and a function. The serve-
XXX
function establishes the function as the handler for the :XXX
event in the object set. Recall from section object-sets,
system:add-xwindow-object
associates some Lisp object with a
CLX window in an object set. When system:serve-event
notices
activity on a window, it calls the function given to
ext:enable-clx-event-handling
. If this function is
ext:object-set-event-handler
, it calls the function given to
serve-
XXX, passing the object given to
system:add-xwindow-object
and the event’s slots as well as a
couple other arguments described below.
To use object sets in this way:
serve-
XXX
functions.
system:serve-event
to service an X event.
This function is a suitable argument to
ext:enable-clx-event-handling
. The actual event handlers
defined for particular events within a given object set must take an
argument for every slot in the appropriate event. In addition to
the event slots, ext:object-set-event-handler
passes the
following arguments:
system:add-xwindow-object
, on which the event occurred.
xlib:event-case
.
xlib:event-case
.
Describing any ext:serve-
event-key-name function, where
event-key-name is an event-key symbol-name (for example,
ext:serve-key-press
), indicates exactly what all the
arguments are in their correct order.
When creating an object set for use with
ext:object-set-event-handler
, specify
ext:default-clx-event-handler
as the default handler for
events in that object set. If no default handler is specified, and
the system invokes the default default handler, it will cause an
error since this function takes arguments suitable for handling port
messages.
Previous: Without Object Sets, Up: Using SERVE-EVENT with the CLX Interface to X [Contents][Index]