diff --git a/dix/devices.c b/dix/devices.c index 7cf82eead..59404e9cf 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -252,7 +252,7 @@ EnableDevice(DeviceIntPtr dev) Bool DisableDevice(DeviceIntPtr dev) { - DeviceIntPtr *prev; + DeviceIntPtr *prev, paired; DeviceIntRec dummyDev; devicePresenceNotify ev; @@ -268,6 +268,16 @@ DisableDevice(DeviceIntPtr dev) dev->next = inputInfo.off_devices; inputInfo.off_devices = dev; + /* Some other device may have been paired with this device. + Re-pair with VCP. We don't repair with a real device, as this + may cause somebody suddenly typing where they shouldn't. + */ + for (paired = inputInfo.devices; paired; paired = paired->next) + { + if (paired->spriteInfo->paired == dev) + PairDevices(NULL, inputInfo.pointer, paired); + } + ev.type = DevicePresenceNotify; ev.time = currentTime.milliseconds; ev.devchange = DeviceDisabled;