[PATCH] Do sent TouchEnd to listeners that don't own an accepted touch

Daniel d'Andrada daniel.dandrada at canonical.com
Thu Jul 26 13:31:57 PDT 2012


When the owner of a touch accepts it, the other listeners must
receive a TouchEnd.

Even though there's code implementing the logic above in
ProcessTouchOwnershipEvent(), DeliverTouchEndEvent() was refusing to send
those TouchEnd events in this situatuation.

Signed-off-by: Daniel d'Andrada <daniel.dandrada at canonical.com>
---
 Xi/exevents.c |    6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 9f6ec84..494d07e 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -1888,6 +1888,12 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
         if (normal_end)
             listener->state = LISTENER_HAS_END;
     }
+    else if (ev->device_event.flags & TOUCH_ACCEPT) {
+        /* Touch has been accepted by its owner, which is not this listener */
+        if (listener->state != LISTENER_HAS_END)
+            rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
+        listener->state = LISTENER_HAS_END;
+    }
 
  out:
     return rc;
-- 
1.7.10.4



More information about the xorg-devel mailing list