diff --git a/miext/damage/damage.c b/miext/damage/damage.c index 0b626eba4..29c85f26b 100644 --- a/miext/damage/damage.c +++ b/miext/damage/damage.c @@ -24,6 +24,7 @@ #include +#include "dix/screen_hooks_priv.h" #include "os/osdep.h" #include @@ -1576,22 +1577,14 @@ damageSetWindowPixmap(WindowPtr pWindow, PixmapPtr pPixmap) } } -static Bool -damageDestroyWindow(WindowPtr pWindow) +static void +damageWindowDestroy(CallbackListPtr *pcbl, ScreenPtr pScreen, WindowPtr pWindow) { DamagePtr pDamage; - ScreenPtr pScreen = pWindow->drawable.pScreen; - Bool ret; - - damageScrPriv(pScreen); while ((pDamage = damageGetWinPriv(pWindow))) { DamageDestroy(pDamage); } - unwrap(pScrPriv, pScreen, DestroyWindow); - ret = (*pScreen->DestroyWindow) (pWindow); - wrap(pScrPriv, pScreen, DestroyWindow, damageDestroyWindow); - return ret; } static Bool @@ -1599,6 +1592,8 @@ damageCloseScreen(ScreenPtr pScreen) { damageScrPriv(pScreen); + dixScreenUnhookWindowDestroy(pScreen, damageWindowDestroy); + unwrap(pScrPriv, pScreen, DestroyPixmap); unwrap(pScrPriv, pScreen, CreateGC); unwrap(pScrPriv, pScreen, CopyWindow); @@ -1691,9 +1686,10 @@ DamageSetup(ScreenPtr pScreen) pScrPriv->internalLevel = 0; pScrPriv->pScreenDamage = 0; + dixScreenHookWindowDestroy(pScreen, damageWindowDestroy); + wrap(pScrPriv, pScreen, DestroyPixmap, damageDestroyPixmap); wrap(pScrPriv, pScreen, CreateGC, damageCreateGC); - wrap(pScrPriv, pScreen, DestroyWindow, damageDestroyWindow); wrap(pScrPriv, pScreen, SetWindowPixmap, damageSetWindowPixmap); wrap(pScrPriv, pScreen, CopyWindow, damageCopyWindow); wrap(pScrPriv, pScreen, CloseScreen, damageCloseScreen); diff --git a/miext/damage/damagestr.h b/miext/damage/damagestr.h index 0d07872e5..53bbe9309 100644 --- a/miext/damage/damagestr.h +++ b/miext/damage/damagestr.h @@ -65,7 +65,6 @@ typedef struct _damageScrPriv { CreateGCProcPtr CreateGC; DestroyPixmapProcPtr DestroyPixmap; SetWindowPixmapProcPtr SetWindowPixmap; - DestroyWindowProcPtr DestroyWindow; CompositeProcPtr Composite; GlyphsProcPtr Glyphs; AddTrapsProcPtr AddTraps;