(!1714) rootless: use window position notify hook
Wrapping ScreenRec's function pointers is problematic for many reasons, so use the new window position notify hook instead. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
parent
2ffc5f1523
commit
4d24ece1c3
|
@ -91,7 +91,6 @@ typedef struct _RootlessScreenRec {
|
|||
RestackWindowProcPtr RestackWindow;
|
||||
ReparentWindowProcPtr ReparentWindow;
|
||||
ChangeBorderWidthProcPtr ChangeBorderWidth;
|
||||
PositionWindowProcPtr PositionWindow;
|
||||
ChangeWindowAttributesProcPtr ChangeWindowAttributes;
|
||||
PaintWindowProcPtr PaintWindow;
|
||||
|
||||
|
|
|
@ -650,6 +650,7 @@ RootlessWrap(ScreenPtr pScreen)
|
|||
RootlessScreenRec *s = SCREENREC(pScreen);
|
||||
|
||||
dixScreenHookWindowDestroy(pScreen, RootlessWindowDestroy, NULL);
|
||||
dixScreenHookWindowPosition(pScreen, RootlessWindowPosition, NULL);
|
||||
|
||||
#define WRAP(a) \
|
||||
if (pScreen->a) { \
|
||||
|
@ -671,7 +672,6 @@ RootlessWrap(ScreenPtr pScreen)
|
|||
WRAP(RealizeWindow);
|
||||
WRAP(UnrealizeWindow);
|
||||
WRAP(MoveWindow);
|
||||
WRAP(PositionWindow);
|
||||
WRAP(ResizeWindow);
|
||||
WRAP(RestackWindow);
|
||||
WRAP(ReparentWindow);
|
||||
|
|
|
@ -300,18 +300,16 @@ RootlessChangeWindowAttributes(WindowPtr pWin, unsigned long vmask)
|
|||
}
|
||||
|
||||
/*
|
||||
* RootlessPositionWindow
|
||||
* @brief DIX move/resize hook
|
||||
*
|
||||
* This is a hook for when DIX moves or resizes a window.
|
||||
* Update the frame position now although the physical window is moved
|
||||
* in RootlessMoveWindow. (x, y) are *inside* position. After this,
|
||||
* mi and fb are expecting the pixmap to be at the new location.
|
||||
*/
|
||||
Bool
|
||||
RootlessPositionWindow(WindowPtr pWin, int x, int y)
|
||||
void RootlessWindowPosition(ScreenPtr pScreen, WindowPtr pWin, void *arg, int32_t x, int32_t y)
|
||||
{
|
||||
ScreenPtr pScreen = pWin->drawable.pScreen;
|
||||
RootlessWindowRec *winRec = WINREC(pWin);
|
||||
Bool result;
|
||||
|
||||
RL_DEBUG_MSG("positionwindow start (win %p (%lu) @ %i, %i)\n", pWin, RootlessWID(pWin), x, y);
|
||||
|
||||
|
@ -325,12 +323,7 @@ RootlessPositionWindow(WindowPtr pWin, int x, int y)
|
|||
}
|
||||
}
|
||||
|
||||
SCREEN_UNWRAP(pScreen, PositionWindow);
|
||||
result = pScreen->PositionWindow(pWin, x, y);
|
||||
SCREEN_WRAP(pScreen, PositionWindow);
|
||||
|
||||
RL_DEBUG_MSG("positionwindow end\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -42,7 +42,7 @@ void RootlessWindowDestroy(ScreenPtr pScreen, WindowPtr pWin, void *arg);
|
|||
void RootlessSetShape(WindowPtr pWin, int kind);
|
||||
|
||||
Bool RootlessChangeWindowAttributes(WindowPtr pWin, unsigned long vmask);
|
||||
Bool RootlessPositionWindow(WindowPtr pWin, int x, int y);
|
||||
void RootlessWindowPosition(ScreenPtr pScreen, WindowPtr pWin, void *arg, int32_t x, int32_t y);
|
||||
Bool RootlessRealizeWindow(WindowPtr pWin);
|
||||
Bool RootlessUnrealizeWindow(WindowPtr pWin);
|
||||
void RootlessRestackWindow(WindowPtr pWin, WindowPtr pOldNextSib);
|
||||
|
|
Loading…
Reference in New Issue