aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/evdev.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/evdev.c b/src/evdev.c
index 12c3e0d..a74a72d 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1096,6 +1096,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));
atoms = xalloc(pEvdev->num_vals * sizeof(Atom));
@@ -1251,12 +1254,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