[PATCH 09/10] Save physical button state for emulated touches too

Chase Douglas chase.douglas at canonical.com
Tue Apr 17 16:33:28 PDT 2012


The physical button state is reported by XIQueryPointer for clients
supporting XI 2.1 and earlier.

Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
---
 Xi/exevents.c      |   14 ++++++++++++--
 include/inputstr.h |    3 ++-
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 90b7c4d..724b228 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -951,7 +951,12 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent *event)
         BUG_WARN(!b || !v);
         BUG_WARN(!t);
 
-        if (!b || !t || !b->map[key])
+        if (!b || !t)
+            return DONT_PROCESS;
+
+        SetBit(t->down, key);
+
+        if (!b->map[key])
             return DONT_PROCESS;
 
         if (!(event->flags & TOUCH_POINTER_EMULATED) ||
@@ -966,7 +971,12 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent *event)
         BUG_WARN(!b || !v);
         BUG_WARN(!t);
 
-        if (!b || !t || t->buttonsDown <= 0 || !b->map[key])
+        if (!b || !t)
+            return DONT_PROCESS;
+
+        ClearBit(t->down, key);
+
+        if (t->buttonsDown <= 0 || !b->map[key])
             return DONT_PROCESS;
 
         if (!(event->flags & TOUCH_POINTER_EMULATED))
diff --git a/include/inputstr.h b/include/inputstr.h
index 5a38924..31c1e78 100644
--- a/include/inputstr.h
+++ b/include/inputstr.h
@@ -342,7 +342,8 @@ typedef struct _TouchClassRec {
     CARD8 mode;                 /* ::XIDirectTouch, XIDependentTouch */
     /* for pointer-emulation */
     CARD8 buttonsDown;          /* number of buttons down */
-    unsigned short state;       /* logical button state */
+    CARD8 down[DOWN_LENGTH];    /* physical emulated button state */
+    unsigned short state;       /* logical emulated button state */
     Mask motionMask;
 } TouchClassRec;
 
-- 
1.7.9.1



More information about the xorg-devel mailing list