If a touch is currently active and emulating pointer events, XIQueryDevice must
set the button 1 in the mask so pointer emulation is complete, as clients using
XI2 would get inconsistent button states wrt events if querying the device. This
is already handled correctly on the core protocol requests.

Signed-off-by: Carlos Garnacho <[email protected]>
---
 Xi/xiquerydevice.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/Xi/xiquerydevice.c b/Xi/xiquerydevice.c
index 4e544f0..762968a 100644
--- a/Xi/xiquerydevice.c
+++ b/Xi/xiquerydevice.c
@@ -261,11 +261,23 @@ ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo * info, 
Bool reportState)
     bits = (unsigned char *) &info[1];
     memset(bits, 0, mask_len * 4);
 
-    if (reportState)
+    if (reportState) {
         for (i = 0; i < dev->button->numButtons; i++)
             if (BitIsOn(dev->button->down, i))
                 SetBit(bits, i);
 
+        /* Cater for touch pointer-emulation */
+        if (dev->touch) {
+            for (i = 0; i < dev->touch->num_touches; i++) {
+                TouchPointInfoPtr ti = dev->touch->touches + i;
+                if (ti->active && ti->emulate_pointer) {
+                    SetBit(bits, 1);
+                    break;
+                }
+            }
+        }
+    }
+
     bits += mask_len * 4;
     memcpy(bits, dev->button->labels, dev->button->numButtons * sizeof(Atom));
 
-- 
1.8.5.2

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to