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 <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-05-02 15:59:22 +02:00
parent 36f0cfcecf
commit 766f51e0c1

View File

@ -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;