From 31ab9f8860848504df18a8be9d19b817b191e0df Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 3 Sep 2010 11:54:41 +1000 Subject: [PATCH] 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 --- mi/mieq.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mi/mieq.c b/mi/mieq.c index d1441e285..01da52a6c 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: