exa: 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-25 19:31:51 +02:00
parent 074fa9b0ba
commit e16a50281b
2 changed files with 6 additions and 7 deletions

View File

@ -32,6 +32,8 @@
#include <stdlib.h>
#include "dix/screen_hooks_priv.h"
#include "exa_priv.h"
#include "exa.h"
@ -734,12 +736,13 @@ ExaWakeupHandler(ScreenPtr pScreen, int result)
* exaCloseScreen() unwraps its wrapped screen functions and tears down EXA's
* screen private, before calling down to the next CloseSccreen.
*/
static Bool
exaCloseScreen(ScreenPtr pScreen)
static void exaCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused)
{
ExaScreenPriv(pScreen);
PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
dixScreenUnhookClose(pScreen, exaCloseScreen);
if (ps && ps->Glyphs == exaGlyphs)
exaGlyphsFini(pScreen);
@ -748,7 +751,6 @@ exaCloseScreen(ScreenPtr pScreen)
if (pScreen->WakeupHandler == ExaWakeupHandler)
unwrap(pExaScr, pScreen, WakeupHandler);
unwrap(pExaScr, pScreen, CreateGC);
unwrap(pExaScr, pScreen, CloseScreen);
unwrap(pExaScr, pScreen, GetImage);
unwrap(pExaScr, pScreen, GetSpans);
if (pExaScr->SavedCreatePixmap)
@ -776,8 +778,6 @@ exaCloseScreen(ScreenPtr pScreen)
}
free(pExaScr);
return (*pScreen->CloseScreen) (pScreen);
}
/**
@ -917,7 +917,7 @@ exaDriverInit(ScreenPtr pScreen, ExaDriverPtr pScreenInfo)
!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS))
wrap(pExaScr, pScreen, WakeupHandler, ExaWakeupHandler);
wrap(pExaScr, pScreen, CreateGC, exaCreateGC);
wrap(pExaScr, pScreen, CloseScreen, exaCloseScreen);
dixScreenHookClose(pScreen, exaCloseScreen);
wrap(pExaScr, pScreen, GetImage, exaGetImage);
wrap(pExaScr, pScreen, GetSpans, ExaCheckGetSpans);
wrap(pExaScr, pScreen, CopyWindow, exaCopyWindow);

View File

@ -152,7 +152,6 @@ typedef struct {
ScreenBlockHandlerProcPtr SavedBlockHandler;
ScreenWakeupHandlerProcPtr SavedWakeupHandler;
CreateGCProcPtr SavedCreateGC;
CloseScreenProcPtr SavedCloseScreen;
GetImageProcPtr SavedGetImage;
GetSpansProcPtr SavedGetSpans;
CreatePixmapProcPtr SavedCreatePixmap;