xfree86: shadowfb: 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
da21e09c2d
commit
b97b378af4
|
@ -5,37 +5,36 @@
|
||||||
Written by Mark Vojkovich (mvojkovi@ucsd.edu)
|
Written by Mark Vojkovich (mvojkovi@ucsd.edu)
|
||||||
Pre-fb-write callbacks and RENDER support - Nolan Leake (nolan@vmware.com)
|
Pre-fb-write callbacks and RENDER support - Nolan Leake (nolan@vmware.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_XORG_CONFIG_H
|
|
||||||
#include <xorg-config.h>
|
#include <xorg-config.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <X11/X.h>
|
#include <X11/X.h>
|
||||||
#include <X11/Xproto.h>
|
#include <X11/Xproto.h>
|
||||||
|
#include <X11/fonts/font.h>
|
||||||
|
#include <X11/fonts/fontstruct.h>
|
||||||
|
|
||||||
|
#include "dix/screen_hooks_priv.h"
|
||||||
|
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "pixmapstr.h"
|
#include "pixmapstr.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include <X11/fonts/font.h>
|
|
||||||
#include "mi.h"
|
#include "mi.h"
|
||||||
#include "scrnintstr.h"
|
#include "scrnintstr.h"
|
||||||
#include "windowstr.h"
|
#include "windowstr.h"
|
||||||
#include "gcstruct.h"
|
#include "gcstruct.h"
|
||||||
#include "dixfontstr.h"
|
#include "dixfontstr.h"
|
||||||
#include <X11/fonts/fontstruct.h>
|
|
||||||
#include "xf86.h"
|
#include "xf86.h"
|
||||||
#include "xf86str.h"
|
#include "xf86str.h"
|
||||||
#include "shadowfb.h"
|
#include "shadowfb.h"
|
||||||
|
|
||||||
#include "picturestr.h"
|
#include "picturestr.h"
|
||||||
|
|
||||||
static Bool ShadowCloseScreen(ScreenPtr pScreen);
|
static void ShadowCloseScreen(CallbackListPtr *, ScreenPtr pScreen, void *unused);
|
||||||
static Bool ShadowCreateRootWindow(WindowPtr pWin);
|
static Bool ShadowCreateRootWindow(WindowPtr pWin);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
ScrnInfoPtr pScrn;
|
ScrnInfoPtr pScrn;
|
||||||
RefreshAreaFuncPtr preRefresh;
|
RefreshAreaFuncPtr preRefresh;
|
||||||
RefreshAreaFuncPtr postRefresh;
|
RefreshAreaFuncPtr postRefresh;
|
||||||
CloseScreenProcPtr CloseScreen;
|
|
||||||
CreateWindowProcPtr CreateWindow;
|
CreateWindowProcPtr CreateWindow;
|
||||||
} ShadowScreenRec, *ShadowScreenPtr;
|
} ShadowScreenRec, *ShadowScreenPtr;
|
||||||
|
|
||||||
|
@ -70,10 +69,9 @@ ShadowFBInit2(ScreenPtr pScreen,
|
||||||
pPriv->preRefresh = preRefreshArea;
|
pPriv->preRefresh = preRefreshArea;
|
||||||
pPriv->postRefresh = postRefreshArea;
|
pPriv->postRefresh = postRefreshArea;
|
||||||
|
|
||||||
pPriv->CloseScreen = pScreen->CloseScreen;
|
dixScreenHookClose(pScreen, ShadowCloseScreen);
|
||||||
pPriv->CreateWindow = pScreen->CreateWindow;
|
|
||||||
|
|
||||||
pScreen->CloseScreen = ShadowCloseScreen;
|
pPriv->CreateWindow = pScreen->CreateWindow;
|
||||||
pScreen->CreateWindow = ShadowCreateRootWindow;
|
pScreen->CreateWindow = ShadowCreateRootWindow;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -158,14 +156,14 @@ ShadowCreateRootWindow(WindowPtr pWin)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Bool
|
static void ShadowCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused)
|
||||||
ShadowCloseScreen(ScreenPtr pScreen)
|
|
||||||
{
|
{
|
||||||
ShadowScreenPtr pPriv = shadowfbGetScreenPrivate(pScreen);
|
dixScreenUnhookClose(pScreen, ShadowCloseScreen);
|
||||||
|
|
||||||
pScreen->CloseScreen = pPriv->CloseScreen;
|
ShadowScreenPtr pPriv = shadowfbGetScreenPrivate(pScreen);
|
||||||
|
if (!pPriv)
|
||||||
|
return;
|
||||||
|
|
||||||
free(pPriv);
|
free(pPriv);
|
||||||
|
dixSetPrivate(&pScreen->devPrivates, &ShadowScreenKeyRec, NULL);
|
||||||
return (*pScreen->CloseScreen) (pScreen);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue