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>
This commit is contained in:
parent
cacdb9a740
commit
6ca30cb33e
11
dix/events.c
11
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue