From 2070c4b5964927fcf684fd6ebada80e89cf7e36f Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Fri, 4 Oct 2024 21:58:57 +0200 Subject: [PATCH] (!1714) 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 | 11 +++-------- render/picture.c | 10 ++-------- render/picturestr.h | 2 -- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/render/animcur.c b/render/animcur.c index f906cd813..93ccd828f 100644 --- a/render/animcur.c +++ b/render/animcur.c @@ -60,7 +60,6 @@ typedef struct _AnimCur { } AnimCurRec, *AnimCurPtr; typedef struct _AnimScrPriv { - CloseScreenProcPtr CloseScreen; CursorLimitsProcPtr CursorLimits; DisplayCursorProcPtr DisplayCursor; SetCursorPositionProcPtr SetCursorPosition; @@ -84,13 +83,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(ScreenPtr pScreen, void *arg) { AnimCurScreenPtr as = GetAnimCurScreen(pScreen); - Bool ret; - Unwrap(as, pScreen, CloseScreen); + dixScreenUnhookClose(pScreen, AnimCurScreenClose, NULL); Unwrap(as, pScreen, CursorLimits); Unwrap(as, pScreen, DisplayCursor); @@ -98,8 +95,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 +281,7 @@ AnimCurInit(ScreenPtr pScreen) as = GetAnimCurScreen(pScreen); - Wrap(as, pScreen, CloseScreen, AnimCurCloseScreen); + dixScreenHookClose(pScreen, AnimCurScreenClose, NULL); Wrap(as, pScreen, CursorLimits, AnimCurCursorLimits); Wrap(as, pScreen, DisplayCursor, AnimCurDisplayCursor); diff --git a/render/picture.c b/render/picture.c index 6fcdeae1e..972d2d278 100644 --- a/render/picture.c +++ b/render/picture.c @@ -76,15 +76,11 @@ picture_window_destructor(ScreenPtr pScreen, WindowPtr pWindow, void *arg) } } -static Bool -PictureCloseScreen(ScreenPtr pScreen) +static void PictureScreenClose(ScreenPtr pScreen, void *arg) { 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) @@ -93,7 +89,6 @@ PictureCloseScreen(ScreenPtr pScreen) SetPictureScreen(pScreen, 0); free(ps->formats); free(ps); - return ret; } static void @@ -684,12 +679,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, NULL); + dixScreenHookClose(pScreen, PictureScreenClose, NULL); 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;