diff --git a/miext/damage/damage.c b/miext/damage/damage.c index 732fafeb6..186aa5164 100644 --- a/miext/damage/damage.c +++ b/miext/damage/damage.c @@ -1484,28 +1484,16 @@ damageInsertDamage(DamagePtr * pPrev, DamagePtr pDamage) *pPrev = pDamage; } -static Bool -damageDestroyPixmap(PixmapPtr pPixmap) +static void damagePixmapDestroy(CallbackListPtr *pcbl, ScreenPtr pScreen, PixmapPtr pPixmap) { - ScreenPtr pScreen = pPixmap->drawable.pScreen; + DamagePtr *pPrev = getPixmapDamageRef(pPixmap); + DamagePtr pDamage; - damageScrPriv(pScreen); - - if (pPixmap->refcnt == 1) { - DamagePtr *pPrev = getPixmapDamageRef(pPixmap); - DamagePtr pDamage; - - while ((pDamage = *pPrev)) { - damageRemoveDamage(pPrev, pDamage); - if (!pDamage->isWindow) - DamageDestroy(pDamage); - } + while ((pDamage = *pPrev)) { + damageRemoveDamage(pPrev, pDamage); + if (!pDamage->isWindow) + DamageDestroy(pDamage); } - unwrap(pScrPriv, pScreen, DestroyPixmap); - if (pScreen->DestroyPixmap) - pScreen->DestroyPixmap(pPixmap); - wrap(pScrPriv, pScreen, DestroyPixmap, damageDestroyPixmap); - return TRUE; } static void @@ -1592,8 +1580,8 @@ damageCloseScreen(ScreenPtr pScreen) damageScrPriv(pScreen); dixScreenUnhookWindowDestroy(pScreen, damageWindowDestroy); + dixScreenUnhookPixmapDestroy(pScreen, damagePixmapDestroy); - unwrap(pScrPriv, pScreen, DestroyPixmap); unwrap(pScrPriv, pScreen, CreateGC); unwrap(pScrPriv, pScreen, CopyWindow); unwrap(pScrPriv, pScreen, CloseScreen); @@ -1686,8 +1674,8 @@ DamageSetup(ScreenPtr pScreen) pScrPriv->pScreenDamage = 0; dixScreenHookWindowDestroy(pScreen, damageWindowDestroy); + dixScreenHookPixmapDestroy(pScreen, damagePixmapDestroy); - wrap(pScrPriv, pScreen, DestroyPixmap, damageDestroyPixmap); wrap(pScrPriv, pScreen, CreateGC, damageCreateGC); wrap(pScrPriv, pScreen, SetWindowPixmap, damageSetWindowPixmap); wrap(pScrPriv, pScreen, CopyWindow, damageCopyWindow); diff --git a/miext/damage/damagestr.h b/miext/damage/damagestr.h index 53bbe9309..af229ae81 100644 --- a/miext/damage/damagestr.h +++ b/miext/damage/damagestr.h @@ -63,7 +63,6 @@ typedef struct _damageScrPriv { CopyWindowProcPtr CopyWindow; CloseScreenProcPtr CloseScreen; CreateGCProcPtr CreateGC; - DestroyPixmapProcPtr DestroyPixmap; SetWindowPixmapProcPtr SetWindowPixmap; CompositeProcPtr Composite; GlyphsProcPtr Glyphs;