present: 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 <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-04-28 15:13:32 +02:00
parent 710079a334
commit 4ca68c30aa
2 changed files with 6 additions and 8 deletions

View File

@ -163,7 +163,6 @@ typedef void (*present_priv_flip_destroy_ptr)(ScreenPtr screen);
struct present_screen_priv {
ScreenPtr pScreen;
CloseScreenProcPtr CloseScreen;
ConfigNotifyProcPtr ConfigNotify;
ClipNotifyProcPtr ClipNotify;

View File

@ -54,18 +54,18 @@ present_get_window_priv(WindowPtr window, Bool create)
/*
* Hook the close screen function to clean up our screen private
*/
static Bool
present_close_screen(ScreenPtr screen)
static void present_close_screen(CallbackListPtr *pcbl, ScreenPtr screen, void *unused)
{
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
if (!screen_priv)
return;
if (screen_priv->flip_destroy)
screen_priv->flip_destroy(screen);
unwrap(screen_priv, screen, CloseScreen);
(*screen->CloseScreen) (screen);
dixScreenUnhookClose(screen, present_close_screen);
dixSetPrivate(&screen->devPrivates, &present_screen_private_key, NULL);
free(screen_priv);
return TRUE;
}
/*
@ -176,9 +176,8 @@ present_screen_priv_init(ScreenPtr screen)
if (!screen_priv)
return NULL;
wrap(screen_priv, screen, CloseScreen, present_close_screen);
dixScreenHookWindowDestroy(screen, present_destroy_window);
dixScreenHookClose(screen, present_close_screen);
wrap(screen_priv, screen, ConfigNotify, present_config_notify);
wrap(screen_priv, screen, ClipNotify, present_clip_notify);