From 88455524fea3ed2d2cb12a8bea369e2b877de54b Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Fri, 2 May 2025 19:50:45 +0200 Subject: [PATCH] miext: rootless: use PostCreateResources screen hook Wrapping ScreenRec's function pointers is problematic for many reasons, so use the new PostCreateScreenResources screen hook instead. Signed-off-by: Enrico Weigelt, metux IT consult --- miext/rootless/rootlessCommon.h | 2 -- miext/rootless/rootlessScreen.c | 22 ++++------------------ 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/miext/rootless/rootlessCommon.h b/miext/rootless/rootlessCommon.h index 6c7350a20..9fdb98e40 100644 --- a/miext/rootless/rootlessCommon.h +++ b/miext/rootless/rootlessCommon.h @@ -80,8 +80,6 @@ typedef struct _RootlessScreenRec { RootlessFrameProcsPtr imp; // Wrapped screen functions - CreateScreenResourcesProcPtr CreateScreenResources; - CreateWindowProcPtr CreateWindow; RealizeWindowProcPtr RealizeWindow; UnrealizeWindowProcPtr UnrealizeWindow; diff --git a/miext/rootless/rootlessScreen.c b/miext/rootless/rootlessScreen.c index 2b8c63977..8cf8a1c6d 100644 --- a/miext/rootless/rootlessScreen.c +++ b/miext/rootless/rootlessScreen.c @@ -111,31 +111,17 @@ RootlessUpdateScreenPixmap(ScreenPtr pScreen) * Rootless implementations typically set a null framebuffer pointer, which * causes problems with miCreateScreenResources. We fix things up here. */ -static Bool -RootlessCreateScreenResources(ScreenPtr pScreen) +static void RootlessCreateScreenResources(CallbackListPtr *pcbl, + ScreenPtr pScreen, Bool *ret) { - Bool ret = TRUE; - - SCREEN_UNWRAP(pScreen, CreateScreenResources); - - if (pScreen->CreateScreenResources != NULL) - ret = (*pScreen->CreateScreenResources) (pScreen); - - SCREEN_WRAP(pScreen, CreateScreenResources); - - if (!ret) - return ret; - /* Make sure we have a valid screen pixmap. */ - RootlessUpdateScreenPixmap(pScreen); - - return ret; } static void RootlessCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused) { dixScreenUnhookClose(pScreen, RootlessCloseScreen); + dixScreenUnhookPostCreateResources(pScreen, RootlessCreateScreenResources); RootlessScreenRec *s = SCREENREC(pScreen); @@ -649,6 +635,7 @@ RootlessWrap(ScreenPtr pScreen) dixScreenHookClose(pScreen, RootlessCloseScreen); dixScreenHookWindowDestroy(pScreen, RootlessWindowDestroy); dixScreenHookWindowPosition(pScreen, RootlessWindowPosition); + dixScreenHookPostCreateResources(pScreen, RootlessCreateScreenResources); #define WRAP(a) \ if (pScreen->a) { \ @@ -659,7 +646,6 @@ RootlessWrap(ScreenPtr pScreen) } \ pScreen->a = Rootless##a - WRAP(CreateScreenResources); WRAP(CreateGC); WRAP(CopyWindow); WRAP(PaintWindow);