diff options
| author | Peter Hutterer <peter.hutterer@who-t.net> | 2012-05-10 12:42:59 +1000 |
|---|---|---|
| committer | Peter Hutterer <peter.hutterer@who-t.net> | 2012-06-07 14:13:47 +1000 |
| commit | e433d1046c222f9d969c2c28a4651ff9097614f4 (patch) | |
| tree | 235ff5511a981258a87239a0df61eff2d2db277b | |
| parent | df1704365e700d3cf1d36a241bdfc479159a8df7 (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.c | 7 |
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; |
