mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-01-01 09:30:09 +01:00
On touch accept, only process end event for owner if it has seen the end
We still need to generate the touch ownership event to process the
ending of the touch event in the case where the owner has the end
already.
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 80d7d1ec6a)
This commit is contained in:
parent
aaf0063bde
commit
fac2c4a5dc
1 changed files with 10 additions and 1 deletions
|
|
@ -1273,9 +1273,18 @@ ProcessTouchOwnershipEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
|
|||
if (ev->reason == XIRejectTouch)
|
||||
TouchRejected(dev, ti, ev->resource, ev);
|
||||
else if (ev->reason == XIAcceptTouch) {
|
||||
int i;
|
||||
|
||||
/* Go through the motions of ending the touch if the listener has
|
||||
* already seen the end. This ensures that the touch record is ended in
|
||||
* the server. */
|
||||
if (ti->listeners[0].state == LISTENER_HAS_END)
|
||||
EmitTouchEnd(dev, ti, TOUCH_ACCEPT, ti->listeners[0].listener);
|
||||
|
||||
/* The touch owner has accepted the touch. Send TouchEnd events to
|
||||
* everyone else, and truncate the list of listeners. */
|
||||
EmitTouchEnd(dev, ti, TOUCH_ACCEPT, 0);
|
||||
for (i = 1; i < ti->num_listeners; i++)
|
||||
EmitTouchEnd(dev, ti, TOUCH_ACCEPT, ti->listeners[i].listener);
|
||||
|
||||
while (ti->num_listeners > 1)
|
||||
TouchRemoveListener(ti, ti->listeners[1].listener);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue