Don't end touchpoint if owning client hasn't accepted/rejected
A touchpoint is ended when no further processing will take place for it. This includes the situation where there is only one grabbing client, and the client receives a touch end before it has accepted/rejected the touchpoint. This change ensures that a delivered touch end event is converted into a touch update event under the above scenario. If the event is left as a touch end event, the touchpoint will be ended in ProcessTouchEvent(). Signed-off-by: Chase Douglas <chase.douglas@canonical.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
075a473e53
commit
e30c3c5c59
|
@ -1803,8 +1803,10 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
|
|||
rc = DeliverOneTouchEvent(client, dev, ti, grab, win, ev);
|
||||
listener->state = LISTENER_HAS_END;
|
||||
}
|
||||
if (ti->num_listeners > 1 &&
|
||||
(ev->device_event.flags & (TOUCH_ACCEPT|TOUCH_REJECT)) == 0)
|
||||
if ((ti->num_listeners > 1 ||
|
||||
(listener->type == LISTENER_GRAB &&
|
||||
xi2mask_isset(xi2mask, dev, XI_TouchOwnership))) &&
|
||||
(ev->device_event.flags & (TOUCH_ACCEPT|TOUCH_REJECT)) == 0)
|
||||
{
|
||||
ev->any.type = ET_TouchUpdate;
|
||||
ev->device_event.flags |= TOUCH_PENDING_END;
|
||||
|
|
Loading…
Reference in New Issue