From a986f2f30cbe2a00e72ded7315c4951d7703e549 Mon Sep 17 00:00:00 2001 From: Chase Douglas Date: Tue, 17 Apr 2012 11:40:15 -0700 Subject: [PATCH] Update device state including when touch record does not exist If a touch is physically active, the pointer core state should reflect that the first button is pressed. Currently, this only occurs when there are active listeners of the touch sequence. By moving the device state updating to the beginning of touch processing we ensure it is updated according to the processed physical state no matter what. Signed-off-by: Chase Douglas Reviewed-by: Peter Hutterer --- Xi/exevents.c | 6 +++--- dix/touch.c | 8 -------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/Xi/exevents.c b/Xi/exevents.c index d2b088c40f..e9f02072aa 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -1597,6 +1597,9 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev) else touchid = ev->device_event.touchid; + if (emulate_pointer) + UpdateDeviceState(dev, &ev->device_event); + if (type == ET_TouchBegin) { ti = TouchBeginTouch(dev, ev->device_event.sourceid, touchid, emulate_pointer); @@ -1996,9 +1999,6 @@ DeliverTouchEvents(DeviceIntPtr dev, TouchPointInfoPtr ti, DeliverTouchEvent(dev, ti, ev, listener, client, win, grab, mask); } - - if (ti->emulate_pointer) - UpdateDeviceState(dev, &ev->device_event); } int diff --git a/dix/touch.c b/dix/touch.c index f8f26c83df..67c4be26dd 100644 --- a/dix/touch.c +++ b/dix/touch.c @@ -364,14 +364,6 @@ TouchEndTouch(DeviceIntPtr dev, TouchPointInfoPtr ti) { if (ti->emulate_pointer) { GrabPtr grab; - DeviceEvent ev; - - memset(&ev, 0, sizeof(ev)); - ev.type = ET_TouchEnd; - ev.detail.button = 1; - ev.touchid = ti->client_id; - ev.flags = TOUCH_POINTER_EMULATED | TOUCH_END; - UpdateDeviceState(dev, &ev); if ((grab = dev->deviceGrab.grab)) { if (dev->deviceGrab.fromPassiveGrab &&