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>
This commit is contained in:
Peter Hutterer 2010-09-03 11:54:41 +10:00
parent 5d31c3e705
commit 31ab9f8860
1 changed files with 7 additions and 1 deletions

View File

@ -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: