Xi: if we delivered a TouchEnd to a passive grab, end it
ef64b5ee97
(which introduced the
TOUCH_CLIENT_ID check) has a wrong assumption that generated touch events
(TOUCH_CLIENT_ID) should not terminate passive grabs.
This is untrue, a TouchEnd may be generated in response to a TouchReject
higher up. If we _deliver_ an event to a client, terminate the passive grab.
This requires us to count the actually delivered events too (first hunk).
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
363b6387da
commit
81554d274f
|
@ -1417,7 +1417,7 @@ DeliverTouchEmulatedEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!deliveries)
|
if (!deliveries)
|
||||||
DeliverOneGrabbedEvent(ptrev, dev, grab->grabtype);
|
deliveries = DeliverOneGrabbedEvent(ptrev, dev, grab->grabtype);
|
||||||
|
|
||||||
/* We must accept the touch sequence once a pointer listener has
|
/* We must accept the touch sequence once a pointer listener has
|
||||||
* received one event past ButtonPress. */
|
* received one event past ButtonPress. */
|
||||||
|
@ -1425,8 +1425,7 @@ DeliverTouchEmulatedEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
|
||||||
!(ev->device_event.flags & TOUCH_CLIENT_ID))
|
!(ev->device_event.flags & TOUCH_CLIENT_ID))
|
||||||
TouchListenerAcceptReject(dev, ti, 0, XIAcceptTouch);
|
TouchListenerAcceptReject(dev, ti, 0, XIAcceptTouch);
|
||||||
|
|
||||||
if (ev->any.type == ET_TouchEnd &&
|
if (deliveries && ev->any.type == ET_TouchEnd &&
|
||||||
!(ev->device_event.flags & TOUCH_CLIENT_ID) &&
|
|
||||||
!dev->button->buttonsDown &&
|
!dev->button->buttonsDown &&
|
||||||
dev->deviceGrab.fromPassiveGrab && GrabIsPointerGrab(grab)) {
|
dev->deviceGrab.fromPassiveGrab && GrabIsPointerGrab(grab)) {
|
||||||
(*dev->deviceGrab.DeactivateGrab) (dev);
|
(*dev->deviceGrab.DeactivateGrab) (dev);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user