|
-
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.
|