xfree86: 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
0bfea99672
commit
cc847cc43a
|
@ -31,13 +31,14 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "dix/screen_hooks_priv.h"
|
||||||
|
|
||||||
#include "exa_priv.h"
|
#include "exa_priv.h"
|
||||||
|
|
||||||
#include "xf86str.h"
|
#include "xf86str.h"
|
||||||
#include "xf86.h"
|
#include "xf86.h"
|
||||||
|
|
||||||
typedef struct _ExaXorgScreenPrivRec {
|
typedef struct _ExaXorgScreenPrivRec {
|
||||||
CloseScreenProcPtr SavedCloseScreen;
|
|
||||||
xf86EnableDisableFBAccessProc *SavedEnableDisableFBAccess;
|
xf86EnableDisableFBAccessProc *SavedEnableDisableFBAccess;
|
||||||
OptionInfoPtr options;
|
OptionInfoPtr options;
|
||||||
} ExaXorgScreenPrivRec, *ExaXorgScreenPrivPtr;
|
} ExaXorgScreenPrivRec, *ExaXorgScreenPrivPtr;
|
||||||
|
@ -69,21 +70,22 @@ static const OptionInfoRec EXAOptions[] = {
|
||||||
OPTV_NONE, {0}, FALSE}
|
OPTV_NONE, {0}, FALSE}
|
||||||
};
|
};
|
||||||
|
|
||||||
static Bool
|
static void exaXorgCloseScreen(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused)
|
||||||
exaXorgCloseScreen(ScreenPtr pScreen)
|
|
||||||
{
|
{
|
||||||
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
|
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
|
||||||
ExaXorgScreenPrivPtr pScreenPriv = (ExaXorgScreenPrivPtr)
|
ExaXorgScreenPrivPtr pScreenPriv = (ExaXorgScreenPrivPtr)
|
||||||
dixLookupPrivate(&pScreen->devPrivates, exaXorgScreenPrivateKey);
|
dixLookupPrivate(&pScreen->devPrivates, exaXorgScreenPrivateKey);
|
||||||
|
|
||||||
pScreen->CloseScreen = pScreenPriv->SavedCloseScreen;
|
dixScreenUnhookClose(pScreen, exaXorgCloseScreen);
|
||||||
|
|
||||||
|
if (!pScrn)
|
||||||
|
return;
|
||||||
|
|
||||||
pScrn->EnableDisableFBAccess = pScreenPriv->SavedEnableDisableFBAccess;
|
pScrn->EnableDisableFBAccess = pScreenPriv->SavedEnableDisableFBAccess;
|
||||||
|
|
||||||
free(pScreenPriv->options);
|
free(pScreenPriv->options);
|
||||||
free(pScreenPriv);
|
free(pScreenPriv);
|
||||||
|
dixSetPrivate(&pScreen->devPrivates, exaXorgScreenPrivateKey, NULL);
|
||||||
return pScreen->CloseScreen(pScreen);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -176,9 +178,7 @@ exaDDXDriverInit(ScreenPtr pScreen)
|
||||||
pScreenPriv->SavedEnableDisableFBAccess = pScrn->EnableDisableFBAccess;
|
pScreenPriv->SavedEnableDisableFBAccess = pScrn->EnableDisableFBAccess;
|
||||||
pScrn->EnableDisableFBAccess = exaXorgEnableDisableFBAccess;
|
pScrn->EnableDisableFBAccess = exaXorgEnableDisableFBAccess;
|
||||||
|
|
||||||
pScreenPriv->SavedCloseScreen = pScreen->CloseScreen;
|
dixScreenHookClose(pScreen, exaXorgCloseScreen);
|
||||||
pScreen->CloseScreen = exaXorgCloseScreen;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static XF86ModuleVersionInfo exaVersRec = {
|
static XF86ModuleVersionInfo exaVersRec = {
|
||||||
|
|
Loading…
Reference in New Issue