aboutsummaryrefslogtreecommitdiff
path: root/xorg-server
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server')
-rw-r--r--xorg-server/dix/getevents.c17
-rw-r--r--xorg-server/dix/grabs.c3
-rw-r--r--xorg-server/include/inputstr.h2
3 files changed, 16 insertions, 6 deletions
diff --git a/xorg-server/dix/getevents.c b/xorg-server/dix/getevents.c
index f1aa7f01a..53030ffd5 100644
--- a/xorg-server/dix/getevents.c
+++ b/xorg-server/dix/getevents.c
@@ -1857,7 +1857,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));
@@ -1888,15 +1888,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 a6351b6e4..710fcb86c 100644
--- a/xorg-server/dix/grabs.c
+++ b/xorg-server/dix/grabs.c
@@ -194,7 +194,8 @@ UngrabAllDevices(Bool kill_client)
PrintDeviceGrabInfo(dev);
client = clients[CLIENT_ID(dev->deviceGrab.grab->resource)];
dev->deviceGrab.DeactivateGrab(dev);
- if (kill_client) 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 */