summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2008-04-10 08:50:43 +0930
committerPeter Hutterer <peter@cs.unisa.edu.au>2008-04-10 08:50:43 +0930
commitdf2545b98d888924209cb889a68737c15f1aa209 (patch)
tree22c09df6886dd69974d9864d05a7494f810f0984
parent5a4c6621aaf4e886f2c3b633e837ba359fedf921 (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.c5
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;