mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-10-29 05:40:12 -04:00 
			
		
		
		
	xwayland: add wlr_xwayland_server_options.terminate_delay
This allows users to specify a delay after which the Xwayland process terminates itself when there are no more X11 clients connected.
This commit is contained in:
		
							parent
							
								
									7ad67e0f1d
								
							
						
					
					
						commit
						352064d76d
					
				
					 3 changed files with 18 additions and 1 deletions
				
			
		|  | @ -24,6 +24,7 @@ struct wlr_xwayland_server_options { | ||||||
| 	bool lazy; | 	bool lazy; | ||||||
| 	bool enable_wm; | 	bool enable_wm; | ||||||
| 	bool no_touch_pointer_emulation; | 	bool no_touch_pointer_emulation; | ||||||
|  | 	int terminate_delay; // in seconds, 0 to terminate immediately
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct wlr_xwayland_server { | struct wlr_xwayland_server { | ||||||
|  |  | ||||||
|  | @ -1,11 +1,13 @@ | ||||||
| have_listenfd = false | have_listenfd = false | ||||||
| have_no_touch_pointer_emulation = false | have_no_touch_pointer_emulation = false | ||||||
|  | have_terminate_delay = false | ||||||
| if xwayland.found() | if xwayland.found() | ||||||
| 	xwayland_path = xwayland.get_variable('xwayland') | 	xwayland_path = xwayland.get_variable('xwayland') | ||||||
| 	have_listenfd = xwayland.get_variable('have_listenfd', | 	have_listenfd = xwayland.get_variable('have_listenfd', | ||||||
| 		default_value: 'false') == 'true' | 		default_value: 'false') == 'true' | ||||||
| 	have_no_touch_pointer_emulation = xwayland.get_variable( | 	have_no_touch_pointer_emulation = xwayland.get_variable( | ||||||
| 		'have_no_touch_pointer_emulation', default_value: 'false') == 'true' | 		'have_no_touch_pointer_emulation', default_value: 'false') == 'true' | ||||||
|  | 	have_terminate_delay = xwayland.get_variable(pkgconfig: 'have_terminate_delay') == 'true' | ||||||
| else | else | ||||||
| 	xwayland_path = xwayland_prog.full_path() | 	xwayland_path = xwayland_prog.full_path() | ||||||
| endif | endif | ||||||
|  | @ -14,6 +16,7 @@ xwayland_config_data = configuration_data() | ||||||
| xwayland_config_data.set_quoted('XWAYLAND_PATH', xwayland_path) | xwayland_config_data.set_quoted('XWAYLAND_PATH', xwayland_path) | ||||||
| xwayland_config_data.set10('HAVE_XWAYLAND_LISTENFD', have_listenfd) | xwayland_config_data.set10('HAVE_XWAYLAND_LISTENFD', have_listenfd) | ||||||
| xwayland_config_data.set10('HAVE_XWAYLAND_NO_TOUCH_POINTER_EMULATION', have_no_touch_pointer_emulation) | xwayland_config_data.set10('HAVE_XWAYLAND_NO_TOUCH_POINTER_EMULATION', have_no_touch_pointer_emulation) | ||||||
|  | xwayland_config_data.set10('HAVE_XWAYLAND_TERMINATE_DELAY', have_terminate_delay) | ||||||
| configure_file( | configure_file( | ||||||
| 	output: 'config.h', | 	output: 'config.h', | ||||||
| 	configuration: xwayland_config_data, | 	configuration: xwayland_config_data, | ||||||
|  |  | ||||||
|  | @ -49,9 +49,18 @@ noreturn static void exec_xwayland(struct wlr_xwayland_server *server, | ||||||
| 	argv[i++] = "Xwayland"; | 	argv[i++] = "Xwayland"; | ||||||
| 	argv[i++] = server->display_name; | 	argv[i++] = server->display_name; | ||||||
| 	argv[i++] = "-rootless"; | 	argv[i++] = "-rootless"; | ||||||
| 	argv[i++] = "-terminate"; |  | ||||||
| 	argv[i++] = "-core"; | 	argv[i++] = "-core"; | ||||||
| 
 | 
 | ||||||
|  | 	argv[i++] = "-terminate"; | ||||||
|  | #if HAVE_XWAYLAND_TERMINATE_DELAY | ||||||
|  | 	char terminate_delay[16]; | ||||||
|  | 	if (server->options.terminate_delay > 0) { | ||||||
|  | 		snprintf(terminate_delay, sizeof(terminate_delay), "%d", | ||||||
|  | 			server->options.terminate_delay); | ||||||
|  | 		argv[i++] = terminate_delay; | ||||||
|  | 	} | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| #if HAVE_XWAYLAND_LISTENFD | #if HAVE_XWAYLAND_LISTENFD | ||||||
| 	argv[i++] = "-listenfd"; | 	argv[i++] = "-listenfd"; | ||||||
| 	argv[i++] = listenfd0; | 	argv[i++] = listenfd0; | ||||||
|  | @ -436,6 +445,10 @@ struct wlr_xwayland_server *wlr_xwayland_server_create( | ||||||
| 	server->wl_display = wl_display; | 	server->wl_display = wl_display; | ||||||
| 	server->options = *options; | 	server->options = *options; | ||||||
| 
 | 
 | ||||||
|  | #if !HAVE_XWAYLAND_TERMINATE_DELAY | ||||||
|  | 	server->options.terminate_delay = 0; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| 	server->x_fd[0] = server->x_fd[1] = -1; | 	server->x_fd[0] = server->x_fd[1] = -1; | ||||||
| 	server->wl_fd[0] = server->wl_fd[1] = -1; | 	server->wl_fd[0] = server->wl_fd[1] = -1; | ||||||
| 	server->wm_fd[0] = server->wm_fd[1] = -1; | 	server->wm_fd[0] = server->wm_fd[1] = -1; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Simon Ser
						Simon Ser