From 766f51e0c190a1221702e66231e2d56740dec8c6 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Fri, 2 May 2025 15:59:22 +0200 Subject: [PATCH] xfree86: crtc: 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 --- hw/xfree86/modes/xf86Crtc.c | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 4808ba236..090d2b6b4 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -747,23 +747,12 @@ xf86OutputDestroy(xf86OutputPtr output) } /* - * Called during CreateScreenResources to hook up RandR + * installed by xf86CrtcScreenInit() and called by during CreateScreenResources */ -static Bool -xf86CrtcCreateScreenResources(ScreenPtr screen) +static void xf86CrtcCreateScreenResources(CallbackListPtr *pcbl, + ScreenPtr pScreen, Bool *ret) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); - - screen->CreateScreenResources = config->CreateScreenResources; - - if (!(*screen->CreateScreenResources) (screen)) - return FALSE; - - if (!xf86RandR12CreateScreenResources(screen)) - return FALSE; - - return TRUE; + xf86RandR12CreateScreenResources(pScreen); } /* @@ -773,6 +762,7 @@ static void xf86CrtcCloseScreen(CallbackListPtr *pcbl, ScreenPtr screen, void *unused) { dixScreenUnhookClose(screen, xf86CrtcCloseScreen); + dixScreenUnhookPostCreateResources(screen, xf86CrtcCreateScreenResources); ScrnInfoPtr scrn = xf86ScreenToScrn(screen); xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); @@ -840,11 +830,8 @@ xf86CrtcScreenInit(ScreenPtr screen) xf86RandR12SetTransformSupport(screen, FALSE); } - /* Wrap CreateScreenResources so we can initialize the RandR code */ - config->CreateScreenResources = screen->CreateScreenResources; - screen->CreateScreenResources = xf86CrtcCreateScreenResources; - dixScreenHookClose(screen, xf86CrtcCloseScreen); + dixScreenHookPostCreateResources(screen, xf86CrtcCreateScreenResources); /* This might still be marked wrapped from a previous generation */ config->BlockHandler = NULL;