From 1bc857d30f283588777135347538b4a635bc9f63 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Sun, 27 Apr 2025 17:45:06 +0200 Subject: [PATCH] miext: shadow: 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/shadow/shadow.c | 15 ++++++++------- miext/shadow/shadow.h | 1 - 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/miext/shadow/shadow.c b/miext/shadow/shadow.c index c0f08780a..d3702f523 100644 --- a/miext/shadow/shadow.c +++ b/miext/shadow/shadow.c @@ -23,8 +23,10 @@ #include #include +#include + +#include "dix/screen_hooks_priv.h" -#include #include "scrnintstr.h" #include "windowstr.h" #include "dixfontstr.h" @@ -93,19 +95,17 @@ shadowGetImage(DrawablePtr pDrawable, int sx, int sy, int w, int h, wrap(pBuf, pScreen, GetImage); } -static Bool -shadowCloseScreen(ScreenPtr pScreen) +static void shadowCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused) { - shadowBuf(pScreen); + dixScreenUnhookClose(pScreen, shadowCloseScreen); + shadowBuf(pScreen); unwrap(pBuf, pScreen, GetImage); - unwrap(pBuf, pScreen, CloseScreen); unwrap(pBuf, pScreen, BlockHandler); shadowRemove(pScreen, pBuf->pPixmap); DamageDestroy(pBuf->pDamage); dixDestroyPixmap(pBuf->pPixmap, 0); free(pBuf); - return pScreen->CloseScreen(pScreen); } Bool @@ -130,7 +130,8 @@ shadowSetup(ScreenPtr pScreen) return FALSE; } - wrap(pBuf, pScreen, CloseScreen); + dixScreenHookClose(pScreen, shadowCloseScreen); + wrap(pBuf, pScreen, GetImage); wrap(pBuf, pScreen, BlockHandler); pBuf->update = 0; diff --git a/miext/shadow/shadow.h b/miext/shadow/shadow.h index c08e1537c..b80520f77 100644 --- a/miext/shadow/shadow.h +++ b/miext/shadow/shadow.h @@ -53,7 +53,6 @@ typedef struct _shadowBuf { /* screen wrappers */ GetImageProcPtr GetImage; - CloseScreenProcPtr CloseScreen; ScreenBlockHandlerProcPtr BlockHandler; } shadowBufRec;