(!1714) xwayland: 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
							
								
									d4deaac6e1
								
							
						
					
					
						commit
						b3f592b481
					
				|  | @ -1134,8 +1134,7 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) | |||
|     xwl_screen->UnrealizeWindow = pScreen->UnrealizeWindow; | ||||
|     pScreen->UnrealizeWindow = xwl_unrealize_window; | ||||
| 
 | ||||
|     xwl_screen->DestroyWindow = pScreen->DestroyWindow; | ||||
|     pScreen->DestroyWindow = xwl_destroy_window; | ||||
|     dixScreenHookWindowDestroy(pScreen, xwl_window_destroy, NULL); | ||||
| 
 | ||||
|     xwl_screen->CloseScreen = pScreen->CloseScreen; | ||||
|     pScreen->CloseScreen = xwl_close_screen; | ||||
|  |  | |||
|  | @ -74,7 +74,6 @@ struct xwl_screen { | |||
|     ConfigNotifyProcPtr ConfigNotify; | ||||
|     RealizeWindowProcPtr RealizeWindow; | ||||
|     UnrealizeWindowProcPtr UnrealizeWindow; | ||||
|     DestroyWindowProcPtr DestroyWindow; | ||||
|     XYToWindowProcPtr XYToWindow; | ||||
|     SetWindowPixmapProcPtr SetWindowPixmap; | ||||
|     ChangeWindowAttributesProcPtr ChangeWindowAttributes; | ||||
|  |  | |||
|  | @ -1939,31 +1939,17 @@ xwl_window_create_frame_callback(struct xwl_window *xwl_window) | |||
|         xwl_present_for_each_frame_callback(xwl_window, xwl_present_reset_timer); | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| xwl_destroy_window(WindowPtr window) | ||||
| void | ||||
| xwl_window_destroy(ScreenPtr pScreen, WindowPtr window, void *arg) | ||||
| { | ||||
|     ScreenPtr screen = window->drawable.pScreen; | ||||
|     struct xwl_screen *xwl_screen = xwl_screen_get(screen); | ||||
|     struct xwl_screen *xwl_screen = xwl_screen_get(pScreen); | ||||
|     struct xwl_window *xwl_window = xwl_window_get(window); | ||||
|     Bool ret; | ||||
| 
 | ||||
|     if (xwl_screen->present) | ||||
|         xwl_present_cleanup(window); | ||||
| 
 | ||||
|     if (xwl_window) | ||||
|         xwl_window_dispose(xwl_window); | ||||
| 
 | ||||
|     screen->DestroyWindow = xwl_screen->DestroyWindow; | ||||
| 
 | ||||
|     if (screen->DestroyWindow) | ||||
|         ret = screen->DestroyWindow (window); | ||||
|     else | ||||
|         ret = TRUE; | ||||
| 
 | ||||
|     xwl_screen->DestroyWindow = screen->DestroyWindow; | ||||
|     screen->DestroyWindow = xwl_destroy_window; | ||||
| 
 | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| static Bool | ||||
|  |  | |||
|  | @ -146,7 +146,7 @@ void xwl_move_window(WindowPtr window, | |||
|                      int x, int y, | ||||
|                      WindowPtr next_sib, | ||||
|                      VTKind kind); | ||||
| Bool xwl_destroy_window(WindowPtr window); | ||||
| void xwl_window_destroy(ScreenPtr pScreen, WindowPtr window, void *arg); | ||||
| void xwl_window_post_damage(struct xwl_window *xwl_window); | ||||
| void xwl_window_create_frame_callback(struct xwl_window *xwl_window); | ||||
| void xwl_window_surface_do_destroy(struct xwl_wl_surface *xwl_wl_surface); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue