From f00e5b02f5d9928cd88961e761da91b5faff1b32 Mon Sep 17 00:00:00 2001 From: Chase Douglas Date: Wed, 18 Jan 2012 18:04:13 -0800 Subject: [PATCH] Only scale direct device touch coordinates Indirect touch devices provide valuator values in pure device coordinates. They also don't need to be fixed up for screen crossings. Signed-off-by: Chase Douglas Reviewed-by: Peter Hutterer Signed-off-by: Peter Hutterer --- dix/getevents.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dix/getevents.c b/dix/getevents.c index d0014e617..2946b16bb 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -1867,7 +1867,12 @@ 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);