- display
A display.
- mode
One of: :async-pointer, :sync-pointer,
:reply-pointer, :async-keyboard, :sync-keyboard,
:replay-keyboard, :async-both, :sync-both.
- time
A timestamp.
Releases some queued events if the client has caused a device to
freeze. The request has no effect if the time is earlier than
the last-grab time of the most recent active grab for the client, or
if the time is later than the current server time. If
time is nil, the current server time is used. The
effect of this function depends on the specified mode.
- :async-pointer – If the pointer is frozen by the client,
pointer event processing continues normally. If the pointer is
frozen twice by the client on behalf of two separate grabs,
:async-pointer releases events for both
grabs. :async-pointer has no effect if the pointer
is not frozen by the client, but the pointer need not be grabbed
by the client.
- :sync-pointer – If the pointer is frozen and actively
grabbed by the client, pointer event processing continues normally
until the next :button-press or :button-release
event is reported to the client, at which time the pointer again
appears to freeze. However, if the reported event causes the
pointer grab to be released, the pointer does not
freeze. :sync-pointer has no effect if the pointer is not
frozen by the client, or if the pointer is not grabbed by the
client.
- :replay-pointer – If the pointer is actively grabbed by
the client and is frozen as the result of an event having been
sent to the client (either from the activation of a
grab-button, or from a previous allow-events with
mode :sync-pointer, but not from a grab-pointer),
the pointer grab is released and that event is completely
reprocessed, but this time ignoring any passive grabs at or above
(towards the root) the grab-window of the grab just
released. The request has no effect if the pointer is not grabbed
by the client, or if the pointer is not frozen as the result of an
event.
- :async-keyboard – If the keyboard is frozen by the client,
keyboard event processing continues normally. If the keyboard is
frozen twice by the client on behalf of two separate grabs,
:async-keyboard releases events for both grabs.
:async-keyboard has no effect if the keyboard is not frozen
by the client, but the keyboard need not be grabbed by the client.
- :sync-keyboard – If the keyboard is frozen and actively
grabbed by the client, keyboard event processing continues
normally until the next :key-press or :key-release
event is reported to the client, at which time the keyboard again
appears to freeze. However if the reported event causes the
keyboard grab to be released, the keyboard does not
freeze. :sync-keyboard has no effect if the keyboard is not
frozen by the client, or if the keyboard is not grabbed by the
client.
- :replay-keyboard – If the keyboard is actively grabbed by
the client and is frozen as the result of an event having been
sent to the client (either from the activation of a grab-key, or
from a previous allow-events with mode
:sync-keyboard, but not from a grab-keyboard), the
keyboard grab is released and that event is completely
reprocessed, but this time ignoring any passive grabs at or above
(towards the root) the grab-window of the grab just
released. The request has no effect if the keyboard is not grabbed
by the client, or if the keyboard is not frozen as the result of
an event.
- :sync-both – If both pointer and keyboard are frozen by
the client, event processing (for both devices) continues normally
until the next :button-press, :button-release,
:key-press, or :key-release event is reported to the
client for a grabbed device (button event for the pointer, key
event for the keyboard). At this time, the devices again appear to
freeze. If the reported event causes the grab to be released, the
devices do not freeze. However, if the other device is still
grabbed, then a subsequent event for it will still cause both
devices to freeze. :sync-both has no effect unless both
pointer and keyboard are frozen by the client. If the pointer of
keyboard is frozen twice by the client on behalf of two separate
grabs, :sync-both thaws for both, but a subsequent
freeze for :sync-both will only freeze each device once.
- :async-both – If the pointer and the keyboard are frozen
by the client, event processing for both devices continues
normally. If a device is frozen twice by the client on behalf of
two separate grabs, :async-both thaws for
both. :async-both has no effect unless both pointer and
keyboard are frozen by the client.
:async-pointer, :sync-pointer, and
:replay-pointer have no effect on processing of keyboard
events. :async-keyboard, :sync-keyboard, and
:replay-keyboard have no effect on processing of pointer
events.
It is possible for both a pointer grab and a keyboard grab to be
active simultaneously by the same or different clients. When a
device is frozen on behalf of either grab, no event processing is
performed for the device. It is possible for a single device to be
frozen due to both grabs. In this case, the freeze must be released
on behalf of both grabs before events can again be processed.