diff options
author | Chase Douglas <chase.douglas@canonical.com> | 2012-04-11 08:17:25 -0700 |
---|---|---|
committer | Chase Douglas <chase.douglas@ubuntu.com> | 2012-04-18 13:58:39 -0700 |
commit | 6ca30cb33e829b4edd01822367e44ffe6f0951b0 (patch) | |
tree | 7bbd004183bbe9b32261a0cddf1c487865b7b315 /dix/events.c | |
parent | cacdb9a74065ccba7d50a82e14abdf04b36c5309 (diff) |
When deactivating an explicit pointer grab, reject all grabs on touches
Explicit pointer grabs are placed at the head of the touch listener
array for pointer emulated touches. If the grab is deactivated, we must
remove it from all touches for the device.
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'dix/events.c')
-rw-r--r-- | dix/events.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/dix/events.c b/dix/events.c index a137d6f7a..52ce0b875 100644 --- a/dix/events.c +++ b/dix/events.c @@ -1473,6 +1473,8 @@ DeactivatePointerGrab(DeviceIntPtr mouse) DeviceIntPtr dev; Bool wasImplicit = (mouse->deviceGrab.fromPassiveGrab && mouse->deviceGrab.implicitGrab); + XID grab_resource = grab->resource; + int i; TouchRemovePointerGrab(mouse); @@ -1497,6 +1499,15 @@ DeactivatePointerGrab(DeviceIntPtr mouse) ReattachToOldMaster(mouse); ComputeFreezes(); + + /* If an explicit grab was deactivated, we must remove it from the head of + * all the touches' listener lists. */ + for (i = 0; mouse->touch && i < mouse->touch->num_touches; i++) { + TouchPointInfoPtr ti = mouse->touch->touches + i; + + if (ti->active && TouchResourceIsOwner(ti, grab_resource)) + TouchListenerAcceptReject(mouse, ti, 0, XIRejectTouch); + } } /** |