mirror of
https://github.com/X11Libre/xserver.git
synced 2026-03-24 05:54:08 +00:00
glx: Add screen DestroyWindow wrapper to destroy the GLX drawable.
Fixes crashes exitting MacSlow's rgba-glx demo.
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -162,6 +162,7 @@ struct __GLXscreen {
|
||||
char *GLXextensions;
|
||||
|
||||
Bool (*CloseScreen)(int index, ScreenPtr pScreen);
|
||||
Bool (*DestroyWindow)(WindowPtr pWindow);
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user