From 31737fff08ec19b394837341d5e358ec401f5cd8 Mon Sep 17 00:00:00 2001 From: Chase Douglas Date: Mon, 15 Nov 2010 11:42:12 -0500 Subject: [PATCH] Fix transformAbsolute transformAbsolute must use old values if valuator mask doesn't have new ones, and it must only set new values if there was a change. Signed-off-by: Chase Douglas Reviewed-by: Peter Hutterer Signed-off-by: Peter Hutterer --- dix/getevents.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/dix/getevents.c b/dix/getevents.c index bc5841fed..a288e36d7 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -1057,14 +1057,18 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask) struct pixman_f_vector p; /* p' = M * p in homogeneous coordinates */ - p.v[0] = valuator_mask_get(mask, 0); - p.v[1] = valuator_mask_get(mask, 1); + p.v[0] = (valuator_mask_isset(mask, 0) ? valuator_mask_get(mask, 0) : + dev->last.valuators[0]); + p.v[1] = (valuator_mask_isset(mask, 1) ? valuator_mask_get(mask, 1) : + dev->last.valuators[1]); p.v[2] = 1.0; pixman_f_transform_point(&dev->transform, &p); - valuator_mask_set(mask, 0, lround(p.v[0])); - valuator_mask_set(mask, 1, lround(p.v[1])); + if (lround(p.v[0]) != dev->last.valuators[0]) + valuator_mask_set(mask, 0, lround(p.v[0])); + if (lround(p.v[1]) != dev->last.valuators[1]) + valuator_mask_set(mask, 1, lround(p.v[1])); } /**