diff --git a/glx/glxcmds.c b/glx/glxcmds.c index 77afbf4..036b09c 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -1080,11 +1080,22 @@ int __glXDisp_GetFBConfigsSGIX(__GLXclientState *cl, GLbyte *pc) return DoGetFBConfigs(cl, req->screen); } +static int glxWindowPrivateKeyIndex; +static DevPrivateKey glxWindowPrivateKey = &glxWindowPrivateKeyIndex; + GLboolean __glXDrawableInit(__GLXdrawable *drawable, __GLXscreen *screen, DrawablePtr pDraw, int type, XID drawId, __GLXconfig *config) { + if (pDraw->type == DRAWABLE_WINDOW) + { + WindowPtr pWin; + + pWin = (WindowPtr) pDraw; + dixSetPrivate(&pWin->devPrivates, glxWindowPrivateKey, drawable); + } + drawable->pDraw = pDraw; drawable->type = type; drawable->drawId = drawId; diff --git a/glx/glxscreens.c b/glx/glxscreens.c index 58d8ee0..8d9ebea 100644 --- a/glx/glxscreens.c +++ b/glx/glxscreens.c @@ -353,8 +353,11 @@ glxDestroyWindow(WindowPtr pWin) ScreenPtr pScreen = pWin->drawable.pScreen; __GLXscreen *pGlxScreen = glxGetScreen(pScreen); Bool retval = TRUE; + __GLXdrawable *drawable; - FreeResource(pWin->drawable.id, FALSE); + drawable = dixLookupPrivate(&pWin->devPrivates, glxWindowPrivateKey); + if (drawable) + FreeResource(drawable->drawId, FALSE); /* call lower wrapped functions */ if (pGlxScreen->DestroyWindow) {