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 <chase.douglas@canonical.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
ec9c429583
commit
a986f2f30c
|
@ -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
|
||||
|
|
|
@ -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 &&
|
||||
|
|
Loading…
Reference in New Issue