--- evdev.c.bak 2009-12-11 04:37:05.000000000 +0100 +++ evdev.c 2010-09-06 23:57:56.000000000 +0200 @@ -1926,7 +1926,8 @@ pEvdev->flags |= EVDEV_ABSOLUTE_EVENTS; if ((TestBit(ABS_X, pEvdev->abs_bitmask) && - TestBit(ABS_Y, pEvdev->abs_bitmask))) { + TestBit(ABS_Y, pEvdev->abs_bitmask) && + !TestBit(REL_X, pEvdev->rel_bitmask))) { xf86Msg(X_INFO, "%s: Found x and y absolute axes\n", pInfo->name); if (TestBit(BTN_TOOL_PEN, pEvdev->key_bitmask)) { @@ -1953,7 +1954,7 @@ } for (i = 0; i < BTN_MISC; i++) { - if (TestBit(i, pEvdev->key_bitmask)) { + if (TestBit(i, pEvdev->key_bitmask) && !has_rel_axes && !has_abs_axes) { xf86Msg(X_INFO, "%s: Found keys\n", pInfo->name); pEvdev->flags |= EVDEV_KEYBOARD_EVENTS; has_keys = TRUE;