(!1714) xfixes: 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
							
								
									1a03a2eef1
								
							
						
					
					
						commit
						a0c0bf08ef
					
				|  | @ -47,6 +47,7 @@ | ||||||
| #include "dix/cursor_priv.h" | #include "dix/cursor_priv.h" | ||||||
| #include "dix/dix_priv.h" | #include "dix/dix_priv.h" | ||||||
| #include "dix/input_priv.h" | #include "dix/input_priv.h" | ||||||
|  | #include "dix/screen_hooks_priv.h" | ||||||
| 
 | 
 | ||||||
| #include "xfixesint.h" | #include "xfixesint.h" | ||||||
| #include "scrnintstr.h" | #include "scrnintstr.h" | ||||||
|  | @ -118,7 +119,6 @@ typedef struct _CursorHideCountRec { | ||||||
| 
 | 
 | ||||||
| typedef struct _CursorScreen { | typedef struct _CursorScreen { | ||||||
|     DisplayCursorProcPtr DisplayCursor; |     DisplayCursorProcPtr DisplayCursor; | ||||||
|     CloseScreenProcPtr CloseScreen; |  | ||||||
|     CursorHideCountPtr pCursorHideCounts; |     CursorHideCountPtr pCursorHideCounts; | ||||||
| } CursorScreenRec, *CursorScreenPtr; | } CursorScreenRec, *CursorScreenPtr; | ||||||
| 
 | 
 | ||||||
|  | @ -190,18 +190,15 @@ CursorDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static Bool | static void CursorScreenClose(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused) | ||||||
| CursorCloseScreen(ScreenPtr pScreen) |  | ||||||
| { | { | ||||||
|     CursorScreenPtr cs = GetCursorScreen(pScreen); |     CursorScreenPtr cs = GetCursorScreen(pScreen); | ||||||
| 
 | 
 | ||||||
|     _X_UNUSED CloseScreenProcPtr close_proc; |  | ||||||
|     _X_UNUSED DisplayCursorProcPtr display_proc; |     _X_UNUSED DisplayCursorProcPtr display_proc; | ||||||
| 
 | 
 | ||||||
|     Unwrap(cs, pScreen, CloseScreen, close_proc); |     dixScreenUnhookClose(pScreen, CursorScreenClose); | ||||||
|     Unwrap(cs, pScreen, DisplayCursor, display_proc); |     Unwrap(cs, pScreen, DisplayCursor, display_proc); | ||||||
|     deleteCursorHideCountsForScreen(pScreen); |     deleteCursorHideCountsForScreen(pScreen); | ||||||
|     return pScreen->CloseScreen(pScreen); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #define CursorAllEvents (XFixesDisplayCursorNotifyMask) | #define CursorAllEvents (XFixesDisplayCursorNotifyMask) | ||||||
|  | @ -1060,7 +1057,7 @@ XFixesCursorInit(void) | ||||||
|     for (i = 0; i < screenInfo.numScreens; i++) { |     for (i = 0; i < screenInfo.numScreens; i++) { | ||||||
|         ScreenPtr pScreen = screenInfo.screens[i]; |         ScreenPtr pScreen = screenInfo.screens[i]; | ||||||
|         CursorScreenPtr cs = GetCursorScreen(pScreen); |         CursorScreenPtr cs = GetCursorScreen(pScreen); | ||||||
|         Wrap(cs, pScreen, CloseScreen, CursorCloseScreen); |         dixScreenHookClose(pScreen, CursorScreenClose); | ||||||
|         Wrap(cs, pScreen, DisplayCursor, CursorDisplayCursor); |         Wrap(cs, pScreen, DisplayCursor, CursorDisplayCursor); | ||||||
|         cs->pCursorHideCounts = NULL; |         cs->pCursorHideCounts = NULL; | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue