summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-12-15 07:53:19 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2011-12-15 08:30:16 +1000
commit6a77b66f2baa87f06c8e7a6bb7723b356e03fde3 (patch)
tree011ce17288bc407bf7527124c7d1aad367bd5470
parentc138889ac428fc81fb8085e35adf19f9e8fde241 (diff)
dix: set core and button state based on the touch state
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@who-t.net>
-rw-r--r--dix/inpututils.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/dix/inpututils.c b/dix/inpututils.c
index 8cd4d5921..50a122f2f 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;