12.5 Sending Events

A client can send an event to a window. Clients selecting this window event will receive it just like any other event sent by the X server.

send-event window event-key event-mask &rest event-slots &key :propagate-p :display &allow-other-keys Function
The destination window for the event.
An event-key defining the type of event to send.
Specifies the event types that receiving clients must select.
Keyword-value pairs that describe the contents of an event.
If true, the event can be propagated to ancestors of the destination window.
A display.

Sends an event specified by the event-key and event-slots to the given destination window. Any active grabs are ignored. The event-slots passed depend on the event type. The keyword symbols used for each event type are event slot names defined by the declare-event macro and are described in paragrpah 12.12.8, Declaring Event Types.

If the window is :pointer-window, the destination window is replaced with the window containing the pointer. If the window is :input-focus, the destination window is replaced with the descendant of the focus window that contains the pointer or (if no such descendant exists) the focus window. The :display keyword is only required if the window is :pointer-window or :input-focus.

The event-key must be one of the core events, or one of the events defined by an extension, so the server can send the event with the correct byte-order. The contents of the event are otherwise unaltered and unchecked by the server, except that the send-event-p event slot is set to true.

If the event-mask is nil, the event is sent to the client that created the destination window with an event-mask of 0; if that client no longer exists, no event is sent. Otherwise, the event is sent to every client selecting any of the event types specified by event-mask on the destination window.

If :propagate-p is true and no clients have selected any of the event types in event-mask on the destination window, the destination is replaced with the closest ancestor of window for which some client has selected a type in event-mask and no intervening window has that type in its do-not-propagate mask. If no such window exists, or if the window is an ancestor of the focus window and :input-focus was originally specified as the destination, the event is not sent to any clients. Otherwise, the event is reported to every client selecting on the final destination any of the types specified in event-mask.