summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2012-05-10 12:42:59 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2012-06-07 14:13:47 +1000
commite433d1046c222f9d969c2c28a4651ff9097614f4 (patch)
tree235ff5511a981258a87239a0df61eff2d2db277b
parentdf1704365e700d3cf1d36a241bdfc479159a8df7 (diff)
dix: disable non-sprite-owners first when disabling paired devices
If a sprite-owner is to be disabled but still paired, disable the paired device first. i.e. disabling a master pointer will disable the master keyboard first. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
-rw-r--r--dix/devices.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/dix/devices.c b/dix/devices.c
index f134f31..c5a713f 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -458,10 +458,13 @@ DisableDevice(DeviceIntPtr dev, BOOL sendevent)
if (IsMaster(dev) && dev->spriteInfo->sprite) {
for (other = inputInfo.devices; other; other = other->next)
- BUG_RETURN_VAL_MSG(other->spriteInfo->paired == dev, FALSE,
- "%s still paired with %s", dev->name, other->spriteInfo->paired->name);
+ if (other->spriteInfo->paired == dev && !other->spriteInfo->spriteOwner)
+ DisableDevice(other, sendevent);
}
+ if (dev->spriteInfo->paired)
+ dev->spriteInfo->paired = NULL;
+
(void) (*dev->deviceProc) (dev, DEVICE_OFF);
dev->enabled = FALSE;