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

Alexander Volkov a.volkov at rusbitech.ru
Tue Jun 2 03:51:52 PDT 2015


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 adds a call to UpdateDeviceState() in case the client
can't be found.

Signed-off-by: Alexander Volkov <a.volkov at rusbitech.ru>
---
 Xi/exevents.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 1c586d0..32e4a2c 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -1590,6 +1590,8 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev)
     if (!ti) {
         DebugF("[Xi] %s: Failed to get event %d for touchpoint %d\n",
                dev->name, type, touchid);
+        if (emulate_pointer)
+            UpdateDeviceState(dev, &ev->device_event);
         return;
     }
 
-- 
2.4.0



More information about the xorg-devel mailing list