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:
parent
074fa9b0ba
commit
e16a50281b
12
exa/exa.c
12
exa/exa.c
|
@ -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);
|
||||
|
|
|
@ -152,7 +152,6 @@ typedef struct {
|
|||
ScreenBlockHandlerProcPtr SavedBlockHandler;
|
||||
ScreenWakeupHandlerProcPtr SavedWakeupHandler;
|
||||
CreateGCProcPtr SavedCreateGC;
|
||||
CloseScreenProcPtr SavedCloseScreen;
|
||||
GetImageProcPtr SavedGetImage;
|
||||
GetSpansProcPtr SavedGetSpans;
|
||||
CreatePixmapProcPtr SavedCreatePixmap;
|
||||
|
|
Loading…
Reference in New Issue