diff --git a/miext/damage/damage.c b/miext/damage/damage.c index 56f24d756..c171af319 100644 --- a/miext/damage/damage.c +++ b/miext/damage/damage.c @@ -1567,21 +1567,20 @@ damageWindowDestroy(CallbackListPtr *pcbl, ScreenPtr pScreen, WindowPtr pWindow) } } -static void damageCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused) +static Bool +damageCloseScreen(ScreenPtr pScreen) { - dixScreenUnhookClose(pScreen, damageCloseScreen); + damageScrPriv(pScreen); + dixScreenUnhookWindowDestroy(pScreen, damageWindowDestroy); dixScreenUnhookPixmapDestroy(pScreen, damagePixmapDestroy); - damageScrPriv(pScreen); - if (!pScrPriv) - return; - unwrap(pScrPriv, pScreen, CreateGC); unwrap(pScrPriv, pScreen, CopyWindow); + unwrap(pScrPriv, pScreen, CloseScreen); - dixSetPrivate(&pScreen->devPrivates, damageScrPrivateKey, NULL); free(pScrPriv); + return (*pScreen->CloseScreen) (pScreen); } /** @@ -1667,13 +1666,13 @@ DamageSetup(ScreenPtr pScreen) pScrPriv->internalLevel = 0; pScrPriv->pScreenDamage = 0; - dixScreenHookClose(pScreen, damageCloseScreen); dixScreenHookWindowDestroy(pScreen, damageWindowDestroy); dixScreenHookPixmapDestroy(pScreen, damagePixmapDestroy); 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 5517d24e0..9b395c55e 100644 --- a/miext/damage/damagestr.h +++ b/miext/damage/damagestr.h @@ -61,7 +61,7 @@ typedef struct _damageScrPriv { DamagePtr pScreenDamage; CopyWindowProcPtr CopyWindow; - void *_dummy1; // required in place of a removed field for ABI compatibility + CloseScreenProcPtr CloseScreen; CreateGCProcPtr CreateGC; void *_dummy2; // required in place of a removed field for ABI compatibility SetWindowPixmapProcPtr SetWindowPixmap;