[PATCH evdev] Fix relative events with swapped axes

przanoni at gmail.com przanoni at gmail.com
Thu Dec 15 06:26:37 PST 2011

From: Paulo Zanoni <paulo.r.zanoni at intel.com>

After we swap the axes, we only call valuator_mask_set for axes that are
not zero, so we need to unset the axes that became zero when swapped.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
 src/evdev.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

Same bug as the previous one, but now with relative events.

Easy to test: just use xinput to change the "Evdev Axes Swap" property
of your mouse and try to control it. Try to move on a straight vertical
or horizontal line to see what happens.

diff --git a/src/evdev.c b/src/evdev.c
index b1f9b2e..562c7e7 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -408,6 +408,10 @@ EvdevProcessValuators(InputInfoPtr pInfo)
             tmp = pEvdev->delta[REL_X];
             pEvdev->delta[REL_X] = pEvdev->delta[REL_Y];
             pEvdev->delta[REL_Y] = tmp;
+            if (pEvdev->delta[REL_X] == 0)
+                valuator_mask_unset(pEvdev->vals, REL_X);
+            if (pEvdev->delta[REL_Y] == 0)
+                valuator_mask_unset(pEvdev->vals, REL_Y);
         if (pEvdev->invert_x)
             pEvdev->delta[REL_X] *= -1;

More information about the xorg-devel mailing list