Created an attachment (id=19814)
Possible fix: look at all bytes of dev->enabled
Okay, I've been able to trace this with gdb (I guess I was inadvertently using the kernel DRM and thus hitting the xkbcomp fork hilarity...), and it indeed looks like a classic endianness bug:
dev->enabled is a Bool, which is typedefed to int. However, the XI_PROP_ENABLED related code in dix/devices.c only looks at the first byte of it (which happens to work with little endian). This patch fixes it for me, but I'm not sure how it fits into the bigger picture; another possibility would be to use a CARD8 local variable instead of dev->enabled directly in the XIChangeDeviceProperty() callers.
Created an attachment (id=19814)
Possible fix: look at all bytes of dev->enabled
Okay, I've been able to trace this with gdb (I guess I was inadvertently using the kernel DRM and thus hitting the xkbcomp fork hilarity...), and it indeed looks like a classic endianness bug:
dev->enabled is a Bool, which is typedefed to int. However, the XI_PROP_ENABLED related code in dix/devices.c only looks at the first byte of it (which happens to work with little endian). This patch fixes it for me, but I'm not sure how it fits into the bigger picture; another possibility would be to use a CARD8 local variable instead of dev->enabled directly in the XIChangeDeviceP roperty( ) callers.