[PATCH 4/5] Implement early touch reject

Peter Hutterer peter.hutterer at who-t.net
Fri Feb 3 00:07:05 PST 2012


On Fri, Feb 03, 2012 at 06:42:02AM +0100, Chase Douglas wrote:
> On 02/03/2012 06:40 AM, Peter Hutterer wrote:
> > On Thu, Feb 02, 2012 at 04:57:57PM -0800, Chase Douglas wrote:
> >> From: Chase Douglas <chase.douglas at ubuntu.com>
> >>
> >> Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
> >> ---
> >>  dix/touch.c |    9 ++++++++-
> >>  1 files changed, 8 insertions(+), 1 deletions(-)
> >>
> >> diff --git a/dix/touch.c b/dix/touch.c
> >> index e24d9ac..1faeb7c 100644
> >> --- a/dix/touch.c
> >> +++ b/dix/touch.c
> >> @@ -1019,9 +1019,16 @@ AllowTouch(ClientPtr client, DeviceIntPtr dev, int mode, uint32_t touchid,
> >>      if (i < ti->num_listeners)
> >>          return BadAccess;
> >>  
> >> -    /* FIXME: Implement early accept/reject */
> >>      if (i > 0)
> >> +    {
> >> +        if (mode == XIRejectTouch)
> >> +        {
> >> +            TouchRemoveListener(ti, ti->listeners[i].listener);
> >> +            return Success;
> > 
> > We need to send a TouchEnd to the listener before we remove it.
> 
> No, that's how the protocol was written originally. You changed that :).
> Now, when a client rejects it is done with the touch sequence. It is not
> guaranteed to receive a TouchEnd event.


not quite. from the spec:
RejectTouch
  The client is no longer interested in the touch sequence,
  and will receive a TouchEnd event. If the client is the current
  owner of the sequence, ownership will be passed on to the next
  listener.

It think you might be referring to inputproto-2.1.99.4-1-g9611be0, which
doesn't cover the same use-case:
    specs: Clarify rejection for touch events on current owner

    The current owner never gets a TouchUpdate(PendingEnd), that event
    is superfluous for the owner. The owner receives a TouchEnd when
    the touch physically ends. If the touch is still active, the
    owner receives a TouchEnd after rejecting the touch.

The sequence is always Begin/Update/End, so we need to send an End event
once rejected.

Cheers,
  Peter


More information about the xorg-devel mailing list