From 69f5c3c4ff3ad479f2a46f52b23033d75eb6a8a5 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Tue, 29 Apr 2025 13:35:09 +0200 Subject: [PATCH] panoramiX: 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 --- Xext/panoramiX.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c index 0675efdbc..f6b2ee40d 100644 --- a/Xext/panoramiX.c +++ b/Xext/panoramiX.c @@ -32,6 +32,7 @@ Equipment Corporation. #include #include "dix/dix_priv.h" +#include "dix/screen_hooks_priv.h" #include "misc.h" #include "cursor.h" @@ -123,7 +124,6 @@ typedef struct { typedef struct { CreateGCProcPtr CreateGC; - CloseScreenProcPtr CloseScreen; } PanoramiXScreenRec, *PanoramiXScreenPtr; static void XineramaValidateGC(GCPtr, unsigned long, DrawablePtr); @@ -148,21 +148,23 @@ static const GCFuncs XineramaGCFuncs = { pGCPriv->wrapFuncs = (pGC)->funcs;\ (pGC)->funcs = &XineramaGCFuncs; -static Bool -XineramaCloseScreen(ScreenPtr pScreen) +static void XineramaCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unsused) { + dixScreenUnhookClose(pScreen, XineramaCloseScreen); + PanoramiXScreenPtr pScreenPriv = (PanoramiXScreenPtr) dixLookupPrivate(&pScreen->devPrivates, PanoramiXScreenKey); - pScreen->CloseScreen = pScreenPriv->CloseScreen; + if (!pScreenPriv) + return; + pScreen->CreateGC = pScreenPriv->CreateGC; if (pScreen->myNum == 0) RegionUninit(&PanoramiXScreenRegion); free(pScreenPriv); - - return (*pScreen->CloseScreen) (pScreen); + dixSetPrivate(&pScreen->devPrivates, PanoramiXScreenKey, NULL); } static Bool @@ -484,11 +486,10 @@ PanoramiXExtensionInit(void) return; } - pScreenPriv->CreateGC = pScreen->CreateGC; - pScreenPriv->CloseScreen = pScreen->CloseScreen; + dixScreenHookClose(pScreen, XineramaCloseScreen); + pScreenPriv->CreateGC = pScreen->CreateGC; pScreen->CreateGC = XineramaCreateGC; - pScreen->CloseScreen = XineramaCloseScreen; } XRC_DRAWABLE = CreateNewResourceClass();