diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-10-05 13:04:10 +0930 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-10-05 13:04:10 +0930 |
commit | d42909b23a9be64a26aa349c1d6dcd8b228bffa7 (patch) | |
tree | 8d9ac1b45d01326e5a7a62a25b7ba003b4e2dbde | |
parent | ff2351246da30b56a3a8f90654993c41b8eb3921 (diff) |
dix: when disabling a device, make sure all paired devices are re-paired.
We re-pair them with the VCP, not a real device! If we would do otherwise,
somebody may change our keyboard focus and thus get us typing where we don't
want to type.
-rw-r--r-- | dix/devices.c | 12 |
1 files changed, 11 insertions, 1 deletions
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; |