rootless: use window destructor hook
Wrapping ScreenRec's function pointers is problematic for many reasons, so use the new window destructor hook instead. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
parent
c3d780d07f
commit
f061315afa
|
@ -84,7 +84,6 @@ typedef struct _RootlessScreenRec {
|
|||
CloseScreenProcPtr CloseScreen;
|
||||
|
||||
CreateWindowProcPtr CreateWindow;
|
||||
DestroyWindowProcPtr DestroyWindow;
|
||||
RealizeWindowProcPtr RealizeWindow;
|
||||
UnrealizeWindowProcPtr UnrealizeWindow;
|
||||
MoveWindowProcPtr MoveWindow;
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "dix/colormap_priv.h"
|
||||
#include "dix/screen_hooks_priv.h"
|
||||
#include "mi/mi_priv.h"
|
||||
|
||||
#include "scrnintstr.h"
|
||||
|
@ -649,6 +650,8 @@ RootlessWrap(ScreenPtr pScreen)
|
|||
{
|
||||
RootlessScreenRec *s = SCREENREC(pScreen);
|
||||
|
||||
dixScreenHookWindowDestroy(pScreen, RootlessWindowDestroy);
|
||||
|
||||
#define WRAP(a) \
|
||||
if (pScreen->a) { \
|
||||
s->a = pScreen->a; \
|
||||
|
@ -666,7 +669,6 @@ RootlessWrap(ScreenPtr pScreen)
|
|||
WRAP(GetImage);
|
||||
WRAP(SourceValidate);
|
||||
WRAP(CreateWindow);
|
||||
WRAP(DestroyWindow);
|
||||
WRAP(RealizeWindow);
|
||||
WRAP(UnrealizeWindow);
|
||||
WRAP(MoveWindow);
|
||||
|
|
|
@ -36,9 +36,10 @@
|
|||
#include <assert.h>
|
||||
#include <X11/Xatom.h>
|
||||
|
||||
#include "dix/dix_priv.h"
|
||||
#include "dix/screen_hooks_priv.h"
|
||||
#include "fb/fb_priv.h"
|
||||
#include "mi/mi_priv.h"
|
||||
#include "dix_priv.h"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <Xplugin.h>
|
||||
|
@ -189,24 +190,14 @@ RootlessDestroyFrame(WindowPtr pWin, RootlessWindowPtr winRec)
|
|||
}
|
||||
|
||||
/*
|
||||
* RootlessDestroyWindow
|
||||
* Destroy the physical window associated with the given window.
|
||||
* @brief window destructor: remove physical window associated with given window
|
||||
*/
|
||||
Bool
|
||||
RootlessDestroyWindow(WindowPtr pWin)
|
||||
void
|
||||
RootlessWindowDestroy(CallbackListPtr *pcbl, ScreenPtr pScreen, WindowPtr pWin)
|
||||
{
|
||||
RootlessWindowRec *winRec = WINREC(pWin);
|
||||
Bool result;
|
||||
|
||||
if (winRec != NULL) {
|
||||
if (winRec != NULL)
|
||||
RootlessDestroyFrame(pWin, winRec);
|
||||
}
|
||||
|
||||
SCREEN_UNWRAP(pWin->drawable.pScreen, DestroyWindow);
|
||||
result = pWin->drawable.pScreen->DestroyWindow(pWin);
|
||||
SCREEN_WRAP(pWin->drawable.pScreen, DestroyWindow);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static Bool
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#include "rootlessCommon.h"
|
||||
|
||||
Bool RootlessCreateWindow(WindowPtr pWin);
|
||||
Bool RootlessDestroyWindow(WindowPtr pWin);
|
||||
void RootlessWindowDestroy(CallbackListPtr *pcbl, ScreenPtr pScreen, WindowPtr pWin);
|
||||
|
||||
void RootlessSetShape(WindowPtr pWin, int kind);
|
||||
|
||||
|
|
Loading…
Reference in New Issue