From 0a516b569080612169a042910213e0a85bf3daef Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 28 Apr 2025 16:15:53 +0200 Subject: [PATCH] miext: rootless: 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/rootless/rootlessCommon.h | 1 - miext/rootless/rootlessScreen.c | 14 +++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/miext/rootless/rootlessCommon.h b/miext/rootless/rootlessCommon.h index fddbc2c36..6c7350a20 100644 --- a/miext/rootless/rootlessCommon.h +++ b/miext/rootless/rootlessCommon.h @@ -81,7 +81,6 @@ typedef struct _RootlessScreenRec { // Wrapped screen functions CreateScreenResourcesProcPtr CreateScreenResources; - CloseScreenProcPtr CloseScreen; CreateWindowProcPtr CreateWindow; RealizeWindowProcPtr RealizeWindow; diff --git a/miext/rootless/rootlessScreen.c b/miext/rootless/rootlessScreen.c index f802fec2b..2b8c63977 100644 --- a/miext/rootless/rootlessScreen.c +++ b/miext/rootless/rootlessScreen.c @@ -133,15 +133,11 @@ RootlessCreateScreenResources(ScreenPtr pScreen) return ret; } -static Bool -RootlessCloseScreen(ScreenPtr pScreen) +static void RootlessCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused) { - RootlessScreenRec *s; + dixScreenUnhookClose(pScreen, RootlessCloseScreen); - s = SCREENREC(pScreen); - - // fixme unwrap everything that was wrapped? - pScreen->CloseScreen = s->CloseScreen; + RootlessScreenRec *s = SCREENREC(pScreen); if (s->pixmap_data != NULL) { free(s->pixmap_data); @@ -150,7 +146,7 @@ RootlessCloseScreen(ScreenPtr pScreen) } free(s); - return pScreen->CloseScreen(pScreen); + dixSetPrivate(&(pScreen)->devPrivates, rootlessScreenPrivateKey, NULL); } static void @@ -650,6 +646,7 @@ RootlessWrap(ScreenPtr pScreen) { RootlessScreenRec *s = SCREENREC(pScreen); + dixScreenHookClose(pScreen, RootlessCloseScreen); dixScreenHookWindowDestroy(pScreen, RootlessWindowDestroy); dixScreenHookWindowPosition(pScreen, RootlessWindowPosition); @@ -663,7 +660,6 @@ RootlessWrap(ScreenPtr pScreen) pScreen->a = Rootless##a WRAP(CreateScreenResources); - WRAP(CloseScreen); WRAP(CreateGC); WRAP(CopyWindow); WRAP(PaintWindow);