This works around a bug in X servers 1.7.x, 1.8.0 and 1.8.1 where the device
mode could sometimes be binary OR'd with the OutOfProximity flag. The result
was a value of 0b10 for relative and 0b11 for Absolute, both of which were
interpreted as relative by this code.
Affected is only the XIQueryDevice call, not the XListInputDevices call.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
XIValuatorClassInfo *v = (XIValuatorClassInfo*)classes[i];
char *name = v->label ? XGetAtomName(display, v->label) : NULL;
+ /* XXX: Bug in X servers 1.7..1.8.1, mode was |
+ OutOfProximity. Remove this once 1.9 is out. */
+ v->mode &= DeviceMode;
+
printf("\t\tDetail for Valuator %d:\n", v->number);
printf("\t\t Label: %s\n", (name) ? name : "None");
printf("\t\t Range: %f - %f\n", v->min, v->max);