(!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
							
								
									e5f5bb62f3
								
							
						
					
					
						commit
						33abdc49cf
					
				|  | @ -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); | ||||
|  |  | |||
|  | @ -303,18 +303,16 @@ RootlessChangeWindowAttributes(WindowPtr pWin, unsigned long vmask) | |||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * RootlessPositionWindow | ||||
|  *  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. | ||||
|  * @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); | ||||
| 
 | ||||
|  | @ -328,12 +326,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