Xi: when punting to a new owner, always create TouchEnd events
If a touch is pending_finish and we just punted it to the next owner, that client must receive a TouchEnd event. If we just punted to the last owner and that owner not a touch grab, we need to end the touch since this is the last event to be sent, and the client cannot accept/reject this. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
026627fe19
commit
214d11d3fc
|
@ -1143,12 +1143,21 @@ TouchPuntToNextOwner(DeviceIntPtr dev, TouchPointInfoPtr ti,
|
||||||
TouchEventHistoryReplay(ti, dev, listener->listener);
|
TouchEventHistoryReplay(ti, dev, listener->listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we've just removed the last grab and the touch has physically
|
/* New owner has Begin/Update but not end. If touch is pending_finish,
|
||||||
* ended, send a TouchEnd event too and finalise the touch. */
|
* emulate the TouchEnd now */
|
||||||
if (ti->num_listeners == 1 && ti->num_grabs == 0 && ti->pending_finish) {
|
if (ti->pending_finish) {
|
||||||
EmitTouchEnd(dev, ti, 0, 0);
|
EmitTouchEnd(dev, ti, 0, 0);
|
||||||
TouchEndTouch(dev, ti);
|
|
||||||
return;
|
/* If the last owner is not a touch grab, finalise the touch, we
|
||||||
|
won't get more correspondence on this.
|
||||||
|
*/
|
||||||
|
if (ti->num_listeners == 1 &&
|
||||||
|
(ti->num_grabs == 0 ||
|
||||||
|
listener->grab->grabtype != XI2 ||
|
||||||
|
!xi2mask_isset(listener->grab->xi2mask, dev, XI_TouchBegin))) {
|
||||||
|
TouchEndTouch(dev, ti);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (accepted_early)
|
if (accepted_early)
|
||||||
|
|
Loading…
Reference in New Issue