Xi: call UpdateDeviceState() even when the client is missing

The client window can be closed in the middle of a touch sequence,
e.g. Qt 4 closes popup windows on MousePress and Qt 5.5 will do it
on TouchBegin. In this case the state of mouse buttons will not be
updated on TouchEnd because ProcessTouchEvent() calls UpdateDeviceState()
only when the event has been sent to the client. It results in a
stuck left mouse button.

This patch leads to calling UpdateDeviceState() in case the client
can't be found.

Signed-off-by: Alexander Volkov <a.volkov@rusbitech.ru>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Alexander Volkov 2015-06-17 12:41:35 +03:00 committed by Peter Hutterer
parent 990cf5b282
commit f4c3cac010
1 changed files with 2 additions and 1 deletions

View File

@ -1590,7 +1590,7 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
if (!ti) {
DebugF("[Xi] %s: Failed to get event %d for touchpoint %d\n",
dev->name, type, touchid);
return;
goto out;
}
/* if emulate_pointer is set, emulate the motion event right
@ -1624,6 +1624,7 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
if (ev->any.type == ET_TouchEnd)
TouchEndTouch(dev, ti);
out:
if (emulate_pointer)
UpdateDeviceState(dev, &ev->device_event);
}