diff options
-rw-r--r-- | include/wlr/xwayland.h | 1 | ||||
-rw-r--r-- | include/xwayland/meson.build | 3 | ||||
-rw-r--r-- | xwayland/server.c | 15 |
3 files changed, 18 insertions, 1 deletions
diff --git a/include/wlr/xwayland.h b/include/wlr/xwayland.h index d4a48393..165ea944 100644 --- a/include/wlr/xwayland.h +++ b/include/wlr/xwayland.h @@ -24,6 +24,7 @@ struct wlr_xwayland_server_options { bool lazy; bool enable_wm; bool no_touch_pointer_emulation; + int terminate_delay; // in seconds, 0 to terminate immediately }; struct wlr_xwayland_server { diff --git a/include/xwayland/meson.build b/include/xwayland/meson.build index 1dad9259..adec52fc 100644 --- a/include/xwayland/meson.build +++ b/include/xwayland/meson.build @@ -1,11 +1,13 @@ have_listenfd = false have_no_touch_pointer_emulation = false +have_terminate_delay = false if xwayland.found() xwayland_path = xwayland.get_variable('xwayland') have_listenfd = xwayland.get_variable('have_listenfd', default_value: 'false') == 'true' have_no_touch_pointer_emulation = xwayland.get_variable( 'have_no_touch_pointer_emulation', default_value: 'false') == 'true' + have_terminate_delay = xwayland.get_variable(pkgconfig: 'have_terminate_delay') == 'true' else xwayland_path = xwayland_prog.full_path() endif @@ -14,6 +16,7 @@ xwayland_config_data = configuration_data() xwayland_config_data.set_quoted('XWAYLAND_PATH', xwayland_path) 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_TERMINATE_DELAY', have_terminate_delay) configure_file( output: 'config.h', configuration: xwayland_config_data, diff --git a/xwayland/server.c b/xwayland/server.c index e0cf5aa5..8502fcec 100644 --- a/xwayland/server.c +++ b/xwayland/server.c @@ -49,9 +49,18 @@ noreturn static void exec_xwayland(struct wlr_xwayland_server *server, argv[i++] = "Xwayland"; argv[i++] = server->display_name; argv[i++] = "-rootless"; - argv[i++] = "-terminate"; 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 argv[i++] = "-listenfd"; argv[i++] = listenfd0; @@ -436,6 +445,10 @@ struct wlr_xwayland_server *wlr_xwayland_server_create( server->wl_display = wl_display; server->options = *options; +#if !HAVE_XWAYLAND_TERMINATE_DELAY + server->options.terminate_delay = 0; +#endif + server->x_fd[0] = server->x_fd[1] = -1; server->wl_fd[0] = server->wl_fd[1] = -1; server->wm_fd[0] = server->wm_fd[1] = -1; |