[PATCH 2/2] Allow grabbing clients to accept or reject touches any time

Peter Hutterer peter.hutterer at who-t.net
Wed Sep 14 09:59:54 PDT 2011


On Wed, Sep 14, 2011 at 10:22:36AM -0500, Chase Douglas wrote:
> This is potentially both a performance and client complexity
> improvement.

this needs more description, especially for the archives (we just talked
about this here at the XDC), please add that to the commit message.

and one more thing: if a client can reject a sequence at any time it may be
that the sequence already disappeared by the time the reject is processed.
(this shouldn't happen unless the client buffers the request but thats been
known to happen).

should we allow clients to reject any touch (even invalid ones) without
returning a BadValue?

Cheers,
  Peter

> 
> Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
> ---
>  XI2proto.h         |    3 ++-
>  specs/XI2proto.txt |   26 +++++++++++++++++---------
>  2 files changed, 19 insertions(+), 10 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..63e8bb3 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,14 +1392,18 @@ 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.
>  
>  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
> -owner of the specified touch ID.
> +or potential owner of the specified touch ID.
>  
>  The following describes the processing that occurs depending on what constant
>  you pass to the event-mode argument:
> @@ -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