xserver: Branch 'server-1.10-branch'

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Thu Aug 11 22:06:30 PDT 2011


 dix/getevents.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

New commits:
commit 02d77caa36e430909a31cb3f3093bcbdbcc272c8
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Apr 21 17:35:55 2011 +1000

    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 at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Chase Douglas <chase.douglas at canonical.com>

diff --git a/dix/getevents.c b/dix/getevents.c
index ba93818..99a751e 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]));
 }
 


More information about the xorg-commit mailing list