dix, mi: stop segfaults when a floating device emits events.
For pointers: don't try to set master->valuator fields if there is no master. For keyboards: check if device is valid before trying to access the fields in miPointerGetScreen (btw. this disables DGA events for floating keyboards). Also stop the hideous number of ErrorFs if we request the paired device for a floating dev.
This commit is contained in:
parent
3063f0c667
commit
59b304d8a2
|
@ -2265,11 +2265,8 @@ GetPairedDevice(DeviceIntPtr dev)
|
||||||
dev = dev->u.master;
|
dev = dev->u.master;
|
||||||
|
|
||||||
if (!dev->spriteInfo->paired)
|
if (!dev->spriteInfo->paired)
|
||||||
{
|
|
||||||
ErrorF("[dix] No device paired with %d (%s).\n",
|
|
||||||
dev->id, dev->name);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
return dev->spriteInfo->paired;
|
return dev->spriteInfo->paired;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -736,8 +736,11 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
|
||||||
|
|
||||||
pDev->valuator->lastx = x;
|
pDev->valuator->lastx = x;
|
||||||
pDev->valuator->lasty = y;
|
pDev->valuator->lasty = y;
|
||||||
master->valuator->lastx = x;
|
if (master)
|
||||||
master->valuator->lasty = y;
|
{
|
||||||
|
master->valuator->lastx = x;
|
||||||
|
master->valuator->lasty = y;
|
||||||
|
}
|
||||||
|
|
||||||
if (!coreOnly)
|
if (!coreOnly)
|
||||||
{
|
{
|
||||||
|
|
|
@ -529,7 +529,7 @@ miPointerCurrentScreen ()
|
||||||
_X_EXPORT ScreenPtr
|
_X_EXPORT ScreenPtr
|
||||||
miPointerGetScreen(DeviceIntPtr pDev)
|
miPointerGetScreen(DeviceIntPtr pDev)
|
||||||
{
|
{
|
||||||
if (!pDev->isMaster && !pDev->u.master)
|
if (!pDev || (!pDev->isMaster && !pDev->u.master))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return MIPOINTER(pDev)->pScreen;
|
return MIPOINTER(pDev)->pScreen;
|
||||||
|
|
Loading…
Reference in New Issue