summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChase Douglas <chase.douglas@canonical.com>2012-04-10 17:12:41 -0700
committerPeter Hutterer <peter.hutterer@who-t.net>2012-04-26 13:33:04 +1000
commitfb01dfb55a6a718affa9354c384823e462ee784a (patch)
treed08b6b0f29368b3738bbfa1860a07360e8e226e5
parentb56c1f95bb2d22996651e0a5ca6b6b0e71710a7b (diff)
Update event type when delivering end event to a pointer listener
Just like when we deliver to a touch listener, we must convert a touch end event to an update event for further clients. This also ensures that the touch record is not deleted at the end of ProcessTouchEvent(). Signed-off-by: Chase Douglas <chase.douglas@canonical.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit 163b0f375d73c05873fb341652de3ed347337828)
-rw-r--r--Xi/exevents.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/Xi/exevents.c b/Xi/exevents.c
index 80ddfcc7c..fc43f0220 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -1757,6 +1757,13 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
listener->type == LISTENER_POINTER_GRAB) {
rc = DeliverTouchEmulatedEvent(dev, ti, ev, listener, client, win,
grab, xi2mask);
+
+ if (ti->num_listeners > 1) {
+ ev->any.type = ET_TouchUpdate;
+ ev->device_event.flags |= TOUCH_PENDING_END;
+ ti->pending_finish = TRUE;
+ }
+
goto out;
}