From 2d6e7289b67bd07f21632e255af929be52f750a6 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Fri, 4 Oct 2024 21:58:57 +0200 Subject: [PATCH] render: 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 --- render/animcur.c | 12 ++++-------- render/picture.c | 11 +++-------- render/picturestr.h | 2 -- 3 files changed, 7 insertions(+), 18 deletions(-) diff --git a/render/animcur.c b/render/animcur.c index f906cd813..b7f5a2b7e 100644 --- a/render/animcur.c +++ b/render/animcur.c @@ -37,6 +37,7 @@ #include #include "dix/cursor_priv.h" +#include "dix/screen_hooks_priv.h" #include "servermd.h" #include "scrnintstr.h" @@ -60,7 +61,6 @@ typedef struct _AnimCur { } AnimCurRec, *AnimCurPtr; typedef struct _AnimScrPriv { - CloseScreenProcPtr CloseScreen; CursorLimitsProcPtr CursorLimits; DisplayCursorProcPtr DisplayCursor; SetCursorPositionProcPtr SetCursorPosition; @@ -84,13 +84,11 @@ static DevPrivateKeyRec AnimCurScreenPrivateKeyRec; #define Wrap(as,s,elt,func) (((as)->elt = (s)->elt), (s)->elt = func) #define Unwrap(as,s,elt) ((s)->elt = (as)->elt) -static Bool -AnimCurCloseScreen(ScreenPtr pScreen) +static void AnimCurScreenClose(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused) { AnimCurScreenPtr as = GetAnimCurScreen(pScreen); - Bool ret; - Unwrap(as, pScreen, CloseScreen); + dixScreenUnhookClose(pScreen, AnimCurScreenClose); Unwrap(as, pScreen, CursorLimits); Unwrap(as, pScreen, DisplayCursor); @@ -98,8 +96,6 @@ AnimCurCloseScreen(ScreenPtr pScreen) Unwrap(as, pScreen, RealizeCursor); Unwrap(as, pScreen, UnrealizeCursor); Unwrap(as, pScreen, RecolorCursor); - ret = (*pScreen->CloseScreen) (pScreen); - return ret; } static void @@ -286,7 +282,7 @@ AnimCurInit(ScreenPtr pScreen) as = GetAnimCurScreen(pScreen); - Wrap(as, pScreen, CloseScreen, AnimCurCloseScreen); + dixScreenHookClose(pScreen, AnimCurScreenClose); Wrap(as, pScreen, CursorLimits, AnimCurCursorLimits); Wrap(as, pScreen, DisplayCursor, AnimCurDisplayCursor); diff --git a/render/picture.c b/render/picture.c index 35c311722..2403bbc40 100644 --- a/render/picture.c +++ b/render/picture.c @@ -77,15 +77,11 @@ picture_window_destructor(CallbackListPtr *pcbl, ScreenPtr pScreen, WindowPtr pW } } -static Bool -PictureCloseScreen(ScreenPtr pScreen) +static void PictureScreenClose(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused) { PictureScreenPtr ps = GetPictureScreen(pScreen); - Bool ret; int n; - pScreen->CloseScreen = ps->CloseScreen; - ret = (*pScreen->CloseScreen) (pScreen); PictureResetFilters(pScreen); for (n = 0; n < ps->nformats; n++) if (ps->formats[n].type == PictTypeIndexed) @@ -94,7 +90,7 @@ PictureCloseScreen(ScreenPtr pScreen) SetPictureScreen(pScreen, 0); free(ps->formats); free(ps); - return ret; + dixScreenUnhookClose(pScreen, PictureScreenClose); } static void @@ -685,12 +681,11 @@ PictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats) ps->subpixel = SubPixelUnknown; - ps->CloseScreen = pScreen->CloseScreen; ps->StoreColors = pScreen->StoreColors; - pScreen->CloseScreen = PictureCloseScreen; pScreen->StoreColors = PictureStoreColors; dixScreenHookWindowDestroy(pScreen, picture_window_destructor); + dixScreenHookClose(pScreen, PictureScreenClose); if (!PictureSetDefaultFilters(pScreen)) { PictureResetFilters(pScreen); diff --git a/render/picturestr.h b/render/picturestr.h index 65dcbc9fc..2307fc26c 100644 --- a/render/picturestr.h +++ b/render/picturestr.h @@ -294,8 +294,6 @@ typedef struct _PictureScreen { GlyphsProcPtr Glyphs; /* unused */ CompositeRectsProcPtr CompositeRects; - CloseScreenProcPtr CloseScreen; - StoreColorsProcPtr StoreColors; InitIndexedProcPtr InitIndexed;