diff --git a/miext/damage/damage.c b/miext/damage/damage.c index 29c85f26b..4deae6516 100644 --- a/miext/damage/damage.c +++ b/miext/damage/damage.c @@ -1587,19 +1587,21 @@ damageWindowDestroy(CallbackListPtr *pcbl, ScreenPtr pScreen, WindowPtr pWindow) } } -static Bool -damageCloseScreen(ScreenPtr pScreen) +static void damageCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused) { - damageScrPriv(pScreen); - + dixScreenUnhookClose(pScreen, damageCloseScreen); dixScreenUnhookWindowDestroy(pScreen, damageWindowDestroy); + damageScrPriv(pScreen); + if (!pScrPriv) + return; + unwrap(pScrPriv, pScreen, DestroyPixmap); unwrap(pScrPriv, pScreen, CreateGC); unwrap(pScrPriv, pScreen, CopyWindow); - unwrap(pScrPriv, pScreen, CloseScreen); + + dixSetPrivate(&pScreen->devPrivates, damageScrPrivateKey, NULL); free(pScrPriv); - return (*pScreen->CloseScreen) (pScreen); } /** @@ -1686,13 +1688,13 @@ DamageSetup(ScreenPtr pScreen) pScrPriv->internalLevel = 0; pScrPriv->pScreenDamage = 0; + dixScreenHookClose(pScreen, damageCloseScreen); dixScreenHookWindowDestroy(pScreen, damageWindowDestroy); wrap(pScrPriv, pScreen, DestroyPixmap, damageDestroyPixmap); wrap(pScrPriv, pScreen, CreateGC, damageCreateGC); wrap(pScrPriv, pScreen, SetWindowPixmap, damageSetWindowPixmap); wrap(pScrPriv, pScreen, CopyWindow, damageCopyWindow); - wrap(pScrPriv, pScreen, CloseScreen, damageCloseScreen); if (ps) { wrap(pScrPriv, ps, Glyphs, damageGlyphs); wrap(pScrPriv, ps, Composite, damageComposite); diff --git a/miext/damage/damagestr.h b/miext/damage/damagestr.h index 53bbe9309..332ccbea0 100644 --- a/miext/damage/damagestr.h +++ b/miext/damage/damagestr.h @@ -61,7 +61,6 @@ typedef struct _damageScrPriv { DamagePtr pScreenDamage; CopyWindowProcPtr CopyWindow; - CloseScreenProcPtr CloseScreen; CreateGCProcPtr CreateGC; DestroyPixmapProcPtr DestroyPixmap; SetWindowPixmapProcPtr SetWindowPixmap;