glx: Add screen DestroyWindow wrapper to destroy the GLX drawable.

Fixes crashes exitting MacSlow's rgba-glx demo.
This commit is contained in:
Michel Dänzer 2009-09-03 08:05:59 +02:00
parent f04fe06ae2
commit 120286aef5
2 changed files with 29 additions and 0 deletions

View File

@ -212,6 +212,7 @@ glxCloseScreen (int index, ScreenPtr pScreen)
__GLXscreen *pGlxScreen = glxGetScreen(pScreen);
pScreen->CloseScreen = pGlxScreen->CloseScreen;
pScreen->DestroyWindow = pGlxScreen->DestroyWindow;
pGlxScreen->destroy(pGlxScreen);
@ -395,6 +396,31 @@ pickFBConfig(__GLXscreen *pGlxScreen, VisualPtr visual)
return best;
}
static Bool
glxDestroyWindow(WindowPtr pWin)
{
ScreenPtr pScreen = pWin->drawable.pScreen;
__GLXscreen *pGlxScreen = glxGetScreen(pScreen);
Bool retval = TRUE;
FreeResource(pWin->drawable.id, FALSE);
/* call lower wrapped functions */
if (pGlxScreen->DestroyWindow) {
/* unwrap */
pScreen->DestroyWindow = pGlxScreen->DestroyWindow;
/* call lower layers */
retval = (*pScreen->DestroyWindow)(pWin);
/* rewrap */
pGlxScreen->DestroyWindow = pScreen->DestroyWindow;
pScreen->DestroyWindow = glxDestroyWindow;
}
return retval;
}
void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr pScreen)
{
__GLXconfig *m;
@ -409,6 +435,8 @@ void __glXScreenInit(__GLXscreen *pGlxScreen, ScreenPtr pScreen)
pGlxScreen->CloseScreen = pScreen->CloseScreen;
pScreen->CloseScreen = glxCloseScreen;
pGlxScreen->DestroyWindow = pScreen->DestroyWindow;
pScreen->DestroyWindow = glxDestroyWindow;
i = 0;
for (m = pGlxScreen->fbconfigs; m != NULL; m = m->next) {

View File

@ -162,6 +162,7 @@ struct __GLXscreen {
char *GLXextensions;
Bool (*CloseScreen)(int index, ScreenPtr pScreen);
Bool (*DestroyWindow)(WindowPtr pWindow);
};