diff options
Diffstat (limited to 'xorg-server')
-rw-r--r-- | xorg-server/dix/getevents.c | 17 | ||||
-rw-r--r-- | xorg-server/dix/grabs.c | 3 | ||||
-rw-r--r-- | xorg-server/include/inputstr.h | 2 |
3 files changed, 16 insertions, 6 deletions
diff --git a/xorg-server/dix/getevents.c b/xorg-server/dix/getevents.c index d0014e617..7678aa1f2 100644 --- a/xorg-server/dix/getevents.c +++ b/xorg-server/dix/getevents.c @@ -1836,7 +1836,7 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid, default: return 0; } - if (!(flags & TOUCH_CLIENT_ID)) + if (t->mode == XIDirectTouch && !(flags & TOUCH_CLIENT_ID)) { if (!valuator_mask_isset(&mask, 0)) valuator_mask_set_double(&mask, 0, valuator_mask_get_double(touchpoint.ti->valuators, 0)); @@ -1867,15 +1867,24 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid, if (need_rawevent) set_raw_valuators(raw, &mask, raw->valuators.data); - scr = scale_to_desktop(dev, &mask, &devx, &devy, &screenx, &screeny); + /* Indirect device touch coordinates are not used for cursor positioning. + * They are merely informational, and are provided in device coordinates. + * The device sprite is used for positioning instead, and it is already + * scaled. */ + if (t->mode == XIDirectTouch) + scr = scale_to_desktop(dev, &mask, &devx, &devy, &screenx, &screeny); if (emulate_pointer) scr = positionSprite(dev, Absolute, &mask, &devx, &devy, &screenx, &screeny); /* see fill_pointer_events for coordinate systems */ - updateHistory(dev, &mask, ms); + if (emulate_pointer) + updateHistory(dev, &mask, ms); + clipValuators(dev, &mask); - storeLastValuators(dev, &mask, 0, 1, devx, devy); + + if (emulate_pointer) + storeLastValuators(dev, &mask, 0, 1, devx, devy); event->root = scr->root->drawable.id; diff --git a/xorg-server/dix/grabs.c b/xorg-server/dix/grabs.c index 701470c83..cc2c946d0 100644 --- a/xorg-server/dix/grabs.c +++ b/xorg-server/dix/grabs.c @@ -195,7 +195,8 @@ UngrabAllDevices(Bool kill_client) client = clients[CLIENT_ID(dev->deviceGrab.grab->resource)]; if (!client || client->clientGone) dev->deviceGrab.DeactivateGrab(dev); - CloseDownClient(client); + if (kill_client) + CloseDownClient(client); } ErrorF("End list of ungrabbed devices\n"); diff --git a/xorg-server/include/inputstr.h b/xorg-server/include/inputstr.h index 518e2f4f7..c3297db64 100644 --- a/xorg-server/include/inputstr.h +++ b/xorg-server/include/inputstr.h @@ -544,7 +544,7 @@ typedef struct _DeviceIntRec { DeviceRec public; DeviceIntPtr next; Bool startup; /* true if needs to be turned on at - server intialization time */ + server initialization time */ DeviceProc deviceProc; /* proc(DevicePtr, DEVICE_xx). It is used to initialize, turn on, or turn off the device */ |