summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2010-09-03 11:54:41 +1000
committerJulien Cristau <jcristau@debian.org>2011-01-12 10:17:46 +0100
commit5549d99acbc38c8a1f12d649c42f044392ec7af0 (patch)
tree77998bea5384ae460a921e36bb44980b23af4e30
parent2fd67c34549f1703e8ca522f92be518b18f90e81 (diff)
mi: handle DGA subtypes when determining the master device.
The subtype in the DGA event is the core type and all ET_ event types (where applicable) are identical to the core types. Thus the switch statement below will work as required and assign the right master device. Fixes a crasher bug on keyboard devices with valuators. If a device sends a motion event while grabbed and a DGA client is active (but has not selected input through DGA), the valuator event is posted through the VCK and eventually results in a NULL-pointer dereference on dev->valuator. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit 31ab9f8860848504df18a8be9d19b817b191e0df) (cherry picked from commit faecab3b13bbaecf4f35f49b833d1b79a5fb647d)
-rw-r--r--mi/mieq.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/mi/mieq.c b/mi/mieq.c
index 9b6d0c901..97f4afcf4 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -320,6 +320,7 @@ CopyGetMasterEvent(DeviceIntPtr sdev,
{
DeviceIntPtr mdev;
int len = original->any.length;
+ int type = original->any.type;
CHECKEVENT(original);
@@ -327,7 +328,12 @@ CopyGetMasterEvent(DeviceIntPtr sdev,
if (!sdev || !sdev->u.master)
return NULL;
- switch(original->any.type)
+#if XFreeXDGA
+ if (type == ET_DGAEvent)
+ type = original->dga_event.subtype;
+#endif
+
+ switch(type)
{
case ET_KeyPress:
case ET_KeyRelease: