summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-06-26 09:37:29 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2009-07-30 09:44:34 +1000
commit3cce7fa38a152ba66d379591e6e3ece60bd73fdd (patch)
treed08100220ff1dec7bfbe57afeffe7783132acdc3
parentc793aa27381dc346d88a3e7d8bdb90dd8d3ed39c (diff)
downloadxorg-driver-xf86-input-evdev-3cce7fa38a152ba66d379591e6e3ece60bd73fdd.tar.gz
If a device fails to initialize relative axes, init the abs. axes instead.
Some devices have relative axes that don't count (scroll wheels). In this case, don't claim we've initialized relative axes, continue with the absolute axes instead. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit b07ab6ea97b779b26e7ae8326528c262cc9907a1)
-rw-r--r--src/evdev.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/evdev.c b/src/evdev.c
index 490fa44..acf2943 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1061,6 +1061,9 @@ EvdevAddRelClass(DeviceIntPtr device)
if (TestBit(REL_DIAL, pEvdev->rel_bitmask))
num_axes--;
+ if (num_axes <= 0)
+ return !Success;
+
pEvdev->num_vals = num_axes;
memset(pEvdev->vals, 0, num_axes * sizeof(int));
@@ -1188,12 +1191,17 @@ EvdevInit(DeviceIntPtr device)
FIXME: somebody volunteer to fix this.
*/
if (pEvdev->flags & EVDEV_RELATIVE_EVENTS) {
- EvdevAddRelClass(device);
- if (pEvdev->flags & EVDEV_ABSOLUTE_EVENTS)
- xf86Msg(X_INFO,"%s: relative axes found, ignoring absolute "
- "axes.\n", device->name);
- pEvdev->flags &= ~EVDEV_ABSOLUTE_EVENTS;
- } else if (pEvdev->flags & EVDEV_ABSOLUTE_EVENTS)
+ if (EvdevAddRelClass(device) == Success)
+ {
+ if (pEvdev->flags & EVDEV_ABSOLUTE_EVENTS)
+ xf86Msg(X_INFO,"%s: relative axes found, ignoring absolute "
+ "axes.\n", device->name);
+ pEvdev->flags &= ~EVDEV_ABSOLUTE_EVENTS;
+ } else
+ pEvdev->flags &= ~EVDEV_RELATIVE_EVENTS;
+ }
+
+ if (pEvdev->flags & EVDEV_ABSOLUTE_EVENTS)
EvdevAddAbsClass(device);
#ifdef HAVE_PROPERTIES