diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2008-04-10 08:50:43 +0930 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2008-04-10 08:50:43 +0930 |
commit | df2545b98d888924209cb889a68737c15f1aa209 (patch) | |
tree | 22c09df6886dd69974d9864d05a7494f810f0984 | |
parent | 5a4c6621aaf4e886f2c3b633e837ba359fedf921 (diff) |
xfree86: Sanity check before retrieving the paired device.
Some pointer devices send key events [1], blindly getting the paired device
crashes the server. So let's check if the device is a pointer before we try to
get the paired device.
[1] The MS Wireless Optical Desktop 2000's multimedia keys are sent through
the pointer device, not through the keyboard device.
-rw-r--r-- | hw/xfree86/common/xf86Xinput.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index d8e23ee8d..c2dd6004b 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -722,7 +722,10 @@ xf86PostKeyboardEvent(DeviceIntPtr device, int index; #if XFreeXDGA - DeviceIntPtr pointer = GetPairedDevice(device); + DeviceIntPtr pointer; + + /* Some pointers send key events, paired device is wrong then. */ + pointer = IsPointerDevice(device) ? device : GetPairedDevice(device); if (miPointerGetScreen(pointer)) { index = miPointerGetScreen(pointer)->myNum; |