summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-04-21 17:35:55 +1000
committerJeremy Huddleston <jeremyhu@apple.com>2011-08-11 21:30:23 -0700
commit02d77caa36e430909a31cb3f3093bcbdbcc272c8 (patch)
tree9703d9bb71c5dd594dc604ecf6169468d76d6892
parent8dea7ac25a47f111a1f3779b1809cbb7d28b0584 (diff)
dix: only transform valuators when we need them.
Unconditionally drop the valuators back into the mask when they were there in the first place. Otherwise, sending identical coordinates from the driver on a translated device causes the valuator mask to be alternatively overwritten with the translated value or left as-is. This leads to the device jumping around between the translated and the original position. The same could be achieved with a valuator_mask_unset() combination. Testcase: xsetwacom set "device name" MapToOutput VGA1 Then press a button on the device, cursor jumps between the two positions. Introduced in 31737fff08ec19b394837341d5e358ec401f5cd8 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
-rw-r--r--dix/getevents.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/dix/getevents.c b/dix/getevents.c
index ba93818e9..99a751e83 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -1075,9 +1075,10 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask)
pixman_f_transform_point(&dev->transform, &p);
- if (lround(p.v[0]) != dev->last.valuators[0])
+ if (valuator_mask_isset(mask, 0))
valuator_mask_set(mask, 0, lround(p.v[0]));
- if (lround(p.v[1]) != dev->last.valuators[1])
+
+ if (valuator_mask_isset(mask, 1))
valuator_mask_set(mask, 1, lround(p.v[1]));
}