[PATCH inputproto multitouch v2] Allow grabbing clients to accept or reject touches any time
Peter Hutterer
peter.hutterer at who-t.net
Wed Sep 14 12:57:08 PDT 2011
On Wed, Sep 14, 2011 at 02:43:17PM -0500, Chase Douglas wrote:
> This is potentially both a performance and client complexity
> improvement. An example is a gesture recognizer using touch grabs on
> each window with a subscription. If events on a child window is known
s/is/are/
> to not match any subscription on the child window, then the client
> should be able to reject the touch grab even if the parent window hasn't
> accepted any of the touches, perhaps because the parent window
> gesture hasn't timed out or crossed other thresholds yet.
>
> As an inverse example, the events may match a child window subscription
> before the root window has rejected ownership. The child window should
> be able to accept the touch proactively. This allows for further clients
> to receive a TouchEnd event earlier, and means the client may be able to
> reduce state being tracked. If this were not allowed, the client would
> need to wait until it received ownership before accepting the sequence.
>
> Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
I think this may require some rewording of the other sections to emphasise
this more. We can do that at a later review of the whole document.
> ---
> XI2proto.h | 3 ++-
> specs/XI2proto.txt | 28 ++++++++++++++++++----------
> 2 files changed, 20 insertions(+), 11 deletions(-)
>
> diff --git a/XI2proto.h b/XI2proto.h
> index 3315f1e..9e2c63c 100644
> --- a/XI2proto.h
> +++ b/XI2proto.h
> @@ -648,8 +648,9 @@ typedef struct {
> uint8_t mode;
> uint8_t pad;
> uint32_t touch_id; /**< Since XI 2.2 */
> + Window grab_window; /**< Since XI 2.2 */
> } xXIAllowEventsReq;
> -#define sz_xXIAllowEventsReq 16 /**< Was 12 before XI 2.2 */
> +#define sz_xXIAllowEventsReq 20 /**< Was 12 before XI 2.2 */
>
>
> /**
> diff --git a/specs/XI2proto.txt b/specs/XI2proto.txt
> index 9bd586a..dfc80cc 100644
> --- a/specs/XI2proto.txt
> +++ b/specs/XI2proto.txt
> @@ -1373,6 +1373,7 @@ active device grab becomes not viewable.
> ReplayDevice, AsyncPair, SyncPair, AcceptTouch*,
> RejectTouch* }
> touch_id*: CARD32
> + grab_window*: Window
> └───
>
> * since XI 2.2
> @@ -1391,13 +1392,17 @@ ownership processing.
> touch_id
> The ID of the touch sequence to accept or reject. The value is undefined
> for event modes other than AcceptTouch and RejectTouch.
> + grab_window
> + The window on which to accept or reject a touch sequence grab. The value
> + is undefined for event modes other than AcceptTouch and RejectTouch.
>
> -The request has no effect if the specified time is earlier than the
> -last-grab time of the most recent active grab for the client, or if the
> -specified time is later than the current X server time.
> +For event modes other than AcceptTouch and RejectTouch, the request has no
> +effect if the specified time is earlier than the last-grab time of the most
> +recent active grab for the client, or if the specified time is later than the
> +current X server time.
why do we need to change this? could we not keep this around (or otherwise
force clients to use CurrentTime for passive touch grabs).
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net> otherwise though.
Cheers,
Peter
> -When event-mode is AcceptTouch or RejectTouch, a BadValue error occurs if the
> -touch ID is invalid. A BadAccess error occurs if this client is not the current
> +When event-mode is AcceptTouch, a BadValue error occurs if the touch ID is
> +invalid. A BadAccess error occurs if this client is not the current or potential
> owner of the specified touch ID.
>
> The following describes the processing that occurs depending on what constant
> @@ -1470,13 +1475,16 @@ you pass to the event-mode argument:
> paired master device frozen by the client.
> AsyncPair has no effect if deviceid specifies a slave device.
> AcceptTouch
> - The client is deemed to have taken control of the touch sequence.
> - TouchEnd events will be sent to all other clients listening to the touch
> - sequence, and they will no longer receive any TouchUpdate events.
> + The client is deemed to have taken control of the touch sequence once it
> + owns the sequence. TouchEnd events will be sent to all clients listening
> + to the touch sequence that have either grabbed the touch sequence on a
> + child window of the grab_window or have received events for the touch
> + sequence through event selection. These clients will no longer receive
> + any TouchUpdate events.
> RejectTouch
> The client is no longer interested in the touch sequence, and will
> - receive a TouchEnd event. Ownership will be passed on to the next
> - listener.
> + receive a TouchEnd event. If the client is the current owner of the
> + sequence, ownership will be passed on to the next listener.
>
> [[requests-passivegrabdevice]]
> ┌───
> --
> 1.7.4.1
>
More information about the xorg-devel
mailing list