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>
This commit is contained in:
Peter Hutterer
2009-06-26 09:37:29 +10:00
parent 7bc48c666d
commit b07ab6ea97

View File

@@ -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