[PATCH 30/42] dix: set core and button state based on the touch state

Peter Hutterer peter.hutterer at who-t.net
Wed Dec 14 19:02:07 PST 2011


If a pointer-emulating touch caused a button to be logically down, set that
state in the input events.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 dix/inpututils.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/dix/inpututils.c b/dix/inpututils.c
index 8cd4d59..50a122f 100644
--- a/dix/inpututils.c
+++ b/dix/inpututils.c
@@ -663,6 +663,8 @@ int event_get_corestate(DeviceIntPtr mouse, DeviceIntPtr kbd)
     /* core state needs to be assembled BEFORE the device is updated. */
     corestate = (kbd && kbd->key) ? XkbStateFieldFromRec(&kbd->key->xkbInfo->state) : 0;
     corestate |= (mouse && mouse->button) ? (mouse->button->state) : 0;
+    corestate |= (mouse && mouse->touch) ? (mouse->touch->state) : 0;
+
     return corestate;
 }
 
@@ -674,6 +676,9 @@ void event_set_state(DeviceIntPtr mouse, DeviceIntPtr kbd, DeviceEvent *event)
         if (BitIsOn(mouse->button->down, i))
             SetBit(event->buttons, i);
 
+    if (mouse && mouse->touch && mouse->touch->buttonsDown > 0)
+        SetBit(event->buttons, mouse->button->map[1]);
+
     if (kbd && kbd->key)
     {
         XkbStatePtr state;
-- 
1.7.7.1



More information about the xorg-devel mailing list