diff --git a/exa/exa.c b/exa/exa.c index 161a7d417..d6820ee64 100644 --- a/exa/exa.c +++ b/exa/exa.c @@ -32,6 +32,8 @@ #include +#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); diff --git a/exa/exa_priv.h b/exa/exa_priv.h index f9e166c66..943241aac 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -152,7 +152,6 @@ typedef struct { ScreenBlockHandlerProcPtr SavedBlockHandler; ScreenWakeupHandlerProcPtr SavedWakeupHandler; CreateGCProcPtr SavedCreateGC; - CloseScreenProcPtr SavedCloseScreen; GetImageProcPtr SavedGetImage; GetSpansProcPtr SavedGetSpans; CreatePixmapProcPtr SavedCreatePixmap;