From 46f2a97c187020f99a8b61ab39ffa74a65dacff1 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 28 Apr 2025 15:22:48 +0200 Subject: [PATCH] miext: damage: use CloseScreen hook Wrapping ScreenRec's function pointers is problematic for many reasons, so use the new screen close notify hook instead. Signed-off-by: Enrico Weigelt, metux IT consult --- miext/damage/damage.c | 16 +++++++++------- miext/damage/damagestr.h | 1 - 2 files changed, 9 insertions(+), 8 deletions(-) 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;