damage: use PixmapDestroy hook

Wrapping ScreenRec's function pointers is problematic for many reasons,
so use the new pixmap destroy notify hook instead.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2024-10-04 17:12:46 +02:00
parent 8264e0ae21
commit 60dd47abda
2 changed files with 9 additions and 22 deletions

View File

@ -1485,14 +1485,8 @@ 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;
damageScrPriv(pScreen);
if (pPixmap->refcnt == 1) {
DamagePtr *pPrev = getPixmapDamageRef(pPixmap);
DamagePtr pDamage;
@ -1502,12 +1496,6 @@ damageDestroyPixmap(PixmapPtr pPixmap)
DamageDestroy(pDamage);
}
}
unwrap(pScrPriv, pScreen, DestroyPixmap);
if (pScreen->DestroyPixmap)
pScreen->DestroyPixmap(pPixmap);
wrap(pScrPriv, pScreen, DestroyPixmap, damageDestroyPixmap);
return TRUE;
}
static void
damageCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
@ -1591,12 +1579,12 @@ static void damageCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *un
{
dixScreenUnhookClose(pScreen, damageCloseScreen);
dixScreenUnhookWindowDestroy(pScreen, damageWindowDestroy);
dixScreenUnhookPixmapDestroy(pScreen, damagePixmapDestroy);
damageScrPriv(pScreen);
if (!pScrPriv)
return;
unwrap(pScrPriv, pScreen, DestroyPixmap);
unwrap(pScrPriv, pScreen, CreateGC);
unwrap(pScrPriv, pScreen, CopyWindow);
@ -1690,8 +1678,8 @@ DamageSetup(ScreenPtr pScreen)
dixScreenHookClose(pScreen, damageCloseScreen);
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);

View File

@ -62,7 +62,6 @@ typedef struct _damageScrPriv {
CopyWindowProcPtr CopyWindow;
CreateGCProcPtr CreateGC;
DestroyPixmapProcPtr DestroyPixmap;
SetWindowPixmapProcPtr SetWindowPixmap;
CompositeProcPtr Composite;
GlyphsProcPtr Glyphs;