[PATCH] dix: set raw event values before adding up relative values (#46976)

Peter Hutterer peter.hutterer at who-t.net
Tue Mar 20 21:09:18 PDT 2012


Regression introduced in 4e52cc0ef48145134cd58d357fb7289e6f8bb709

Raw event values are values as-is from the driver, modified only be
transformation or acceleration. 4e52cc caused the mask to be updated from
driver-submitted relative to device-absolute coordinates, and that mask was
then written into the raw events.

Move the raw event update into the respective branches for absolute/relative
events.

X.Org Bug 46976 <http://bugs.freedesktop.org/show_bug.cgi?id=46976>

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 dix/getevents.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/dix/getevents.c b/dix/getevents.c
index 5b9cef3..fd5998d 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -1311,17 +1311,18 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
 
         transformAbsolute(pDev, &mask);
         clipAbsolute(pDev, &mask);
+        if ((flags & POINTER_NORAW) == 0)
+            set_raw_valuators(raw, &mask, raw->valuators.data);
     } else {
         if (flags & POINTER_ACCELERATE)
             accelPointer(pDev, &mask, ms);
+        if ((flags & POINTER_NORAW) == 0)
+            set_raw_valuators(raw, &mask, raw->valuators.data);
+
         moveRelative(pDev, &mask);
     }
 
     /* valuators are in device coordinate system in absolute coordinates */
-
-    if ((flags & POINTER_NORAW) == 0)
-        set_raw_valuators(raw, &mask, raw->valuators.data);
-
     scale_to_desktop(pDev, &mask, &devx, &devy, &screenx, &screeny);
     scr = positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative,
                          &mask, &devx, &devy, &screenx, &screeny);
-- 
1.7.7.6



More information about the xorg-devel mailing list