Reset grab->next to NULL when we're creating a grab.
This is definitely necessary in CheckDeviceGrabAndHintWindow (thanks to Paulo Zanoni for spotting it). We're resetting it everywhere else too, just to be save.
This commit is contained in:
parent
49136d3e9f
commit
08779c62ba
|
@ -1170,6 +1170,7 @@ CheckDeviceGrabAndHintWindow(WindowPtr pWin, int type,
|
||||||
tempGrab.confineTo = NullWindow;
|
tempGrab.confineTo = NullWindow;
|
||||||
tempGrab.cursor = NullCursor;
|
tempGrab.cursor = NullCursor;
|
||||||
tempGrab.genericMasks = NULL;
|
tempGrab.genericMasks = NULL;
|
||||||
|
tempGrab.next = NULL;
|
||||||
(*dev->deviceGrab.ActivateGrab) (dev, &tempGrab, currentTime, TRUE);
|
(*dev->deviceGrab.ActivateGrab) (dev, &tempGrab, currentTime, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2001,6 +2001,7 @@ DeliverEventsToWindow(DeviceIntPtr pDev, WindowPtr pWin, xEvent
|
||||||
GrabRec tempGrab;
|
GrabRec tempGrab;
|
||||||
OtherInputMasks *inputMasks;
|
OtherInputMasks *inputMasks;
|
||||||
|
|
||||||
|
tempGrab.next = NULL;
|
||||||
tempGrab.device = pDev;
|
tempGrab.device = pDev;
|
||||||
tempGrab.resource = client->clientAsMask;
|
tempGrab.resource = client->clientAsMask;
|
||||||
tempGrab.window = pWin;
|
tempGrab.window = pWin;
|
||||||
|
@ -3023,6 +3024,7 @@ CheckPassiveGrabsOnWindow(
|
||||||
tempGrab.detail.exact = xE->u.u.detail;
|
tempGrab.detail.exact = xE->u.u.detail;
|
||||||
tempGrab.detail.pMask = NULL;
|
tempGrab.detail.pMask = NULL;
|
||||||
tempGrab.modifiersDetail.pMask = NULL;
|
tempGrab.modifiersDetail.pMask = NULL;
|
||||||
|
tempGrab.next = NULL;
|
||||||
for (; grab; grab = grab->next)
|
for (; grab; grab = grab->next)
|
||||||
{
|
{
|
||||||
#ifdef XKB
|
#ifdef XKB
|
||||||
|
@ -4652,6 +4654,7 @@ ProcGrabPointer(ClientPtr client)
|
||||||
ConfineCursorToWindow(device, RootWindow(device), FALSE, FALSE);
|
ConfineCursorToWindow(device, RootWindow(device), FALSE, FALSE);
|
||||||
oldCursor = grab->cursor;
|
oldCursor = grab->cursor;
|
||||||
}
|
}
|
||||||
|
tempGrab.next = NULL;
|
||||||
tempGrab.cursor = cursor;
|
tempGrab.cursor = cursor;
|
||||||
tempGrab.resource = client->clientAsMask;
|
tempGrab.resource = client->clientAsMask;
|
||||||
tempGrab.ownerEvents = stuff->ownerEvents;
|
tempGrab.ownerEvents = stuff->ownerEvents;
|
||||||
|
@ -4820,6 +4823,7 @@ GrabDevice(ClientPtr client, DeviceIntPtr dev,
|
||||||
/* Otherwise segfaults happen on grabbed MPX devices */
|
/* Otherwise segfaults happen on grabbed MPX devices */
|
||||||
memset(&tempGrab, 0, sizeof(GrabRec));
|
memset(&tempGrab, 0, sizeof(GrabRec));
|
||||||
|
|
||||||
|
tempGrab.next = NULL;
|
||||||
tempGrab.window = pWin;
|
tempGrab.window = pWin;
|
||||||
tempGrab.resource = client->clientAsMask;
|
tempGrab.resource = client->clientAsMask;
|
||||||
tempGrab.ownerEvents = ownerEvents;
|
tempGrab.ownerEvents = ownerEvents;
|
||||||
|
@ -5192,6 +5196,7 @@ ProcUngrabKey(ClientPtr client)
|
||||||
tempGrab.type = KeyPress;
|
tempGrab.type = KeyPress;
|
||||||
tempGrab.detail.exact = stuff->key;
|
tempGrab.detail.exact = stuff->key;
|
||||||
tempGrab.detail.pMask = NULL;
|
tempGrab.detail.pMask = NULL;
|
||||||
|
tempGrab.next = NULL;
|
||||||
|
|
||||||
if (!DeletePassiveGrabFromList(&tempGrab))
|
if (!DeletePassiveGrabFromList(&tempGrab))
|
||||||
return(BadAlloc);
|
return(BadAlloc);
|
||||||
|
@ -5370,6 +5375,7 @@ ProcUngrabButton(ClientPtr client)
|
||||||
tempGrab.type = ButtonPress;
|
tempGrab.type = ButtonPress;
|
||||||
tempGrab.detail.exact = stuff->button;
|
tempGrab.detail.exact = stuff->button;
|
||||||
tempGrab.detail.pMask = NULL;
|
tempGrab.detail.pMask = NULL;
|
||||||
|
tempGrab.next = NULL;
|
||||||
|
|
||||||
if (!DeletePassiveGrabFromList(&tempGrab))
|
if (!DeletePassiveGrabFromList(&tempGrab))
|
||||||
return(BadAlloc);
|
return(BadAlloc);
|
||||||
|
@ -5897,6 +5903,7 @@ ExtGrabDevice(ClientPtr client,
|
||||||
newGrab.confineTo = confineTo;
|
newGrab.confineTo = confineTo;
|
||||||
newGrab.eventMask = xi_mask;
|
newGrab.eventMask = xi_mask;
|
||||||
newGrab.genericMasks = NULL;
|
newGrab.genericMasks = NULL;
|
||||||
|
newGrab.next = NULL;
|
||||||
|
|
||||||
if (ge_masks)
|
if (ge_masks)
|
||||||
{
|
{
|
||||||
|
|
|
@ -106,6 +106,7 @@ CreateGrab(
|
||||||
grab->confineTo = confineTo;
|
grab->confineTo = confineTo;
|
||||||
grab->cursor = cursor;
|
grab->cursor = cursor;
|
||||||
grab->genericMasks = NULL;
|
grab->genericMasks = NULL;
|
||||||
|
grab->next = NULL;
|
||||||
if (cursor)
|
if (cursor)
|
||||||
cursor->refcnt++;
|
cursor->refcnt++;
|
||||||
return grab;
|
return grab;
|
||||||
|
|
Loading…
Reference in New Issue