From e433d1046c222f9d969c2c28a4651ff9097614f4 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 10 May 2012 12:42:59 +1000 Subject: [PATCH] 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 Reviewed-by: Chase Douglas --- dix/devices.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dix/devices.c b/dix/devices.c index f134f31f9..c5a713f08 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;