Make sure window->optional is allocated before assigning it.
DeletePassiveGrabFromList() may remove the window optional, so we need to re-alloc it if it isn't there anymore. Thanks to Colin Harrison for spotting the bug.
This commit is contained in:
parent
f7f3fe7fe7
commit
2691c05fd6
12
dix/grabs.c
12
dix/grabs.c
|
@ -322,12 +322,6 @@ AddPassiveGrabToList(GrabPtr pGrab)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pGrab->window->optional && !MakeWindowOptional (pGrab->window))
|
|
||||||
{
|
|
||||||
FreeGrab(pGrab);
|
|
||||||
return BadAlloc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Remove all grabs that match the new one exactly */
|
/* Remove all grabs that match the new one exactly */
|
||||||
for (grab = wPassiveGrabs(pGrab->window); grab; grab = grab->next)
|
for (grab = wPassiveGrabs(pGrab->window); grab; grab = grab->next)
|
||||||
{
|
{
|
||||||
|
@ -338,6 +332,12 @@ AddPassiveGrabToList(GrabPtr pGrab)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pGrab->window->optional && !MakeWindowOptional (pGrab->window))
|
||||||
|
{
|
||||||
|
FreeGrab(pGrab);
|
||||||
|
return BadAlloc;
|
||||||
|
}
|
||||||
|
|
||||||
pGrab->next = pGrab->window->optional->passiveGrabs;
|
pGrab->next = pGrab->window->optional->passiveGrabs;
|
||||||
pGrab->window->optional->passiveGrabs = pGrab;
|
pGrab->window->optional->passiveGrabs = pGrab;
|
||||||
if (AddResource(pGrab->resource, RT_PASSIVEGRAB, (pointer)pGrab))
|
if (AddResource(pGrab->resource, RT_PASSIVEGRAB, (pointer)pGrab))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user