dix: only reject active grabs on ungrab and do it before actually ungrabbing
An active grab ungrabbing is the same as rejecting the grab, since the client is no longer interested in those events. So reject any touch grab, but do so before actually deactivating since we're interested in the TouchEnd for the current grabbing client. A passive grab otoh is _not_ like rejecting a grab, since it deactivates automatically when the touch ends. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
146f48c293
commit
bc1f90a615
|
@ -1503,11 +1503,20 @@ DeactivatePointerGrab(DeviceIntPtr mouse)
|
|||
{
|
||||
GrabPtr grab = mouse->deviceGrab.grab;
|
||||
DeviceIntPtr dev;
|
||||
Bool wasPassive = mouse->deviceGrab.fromPassiveGrab;
|
||||
Bool wasImplicit = (mouse->deviceGrab.fromPassiveGrab &&
|
||||
mouse->deviceGrab.implicitGrab);
|
||||
XID grab_resource = grab->resource;
|
||||
int i;
|
||||
|
||||
/* If an explicit grab was deactivated, we must remove it from the head of
|
||||
* all the touches' listener lists. */
|
||||
for (i = 0; !wasPassive && 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);
|
||||
}
|
||||
|
||||
TouchRemovePointerGrab(mouse);
|
||||
|
||||
mouse->valuator->motionHintWindow = NullWindow;
|
||||
|
|
Loading…
Reference in New Issue