From 3e801d68f2c6c64567b1f24c6d03893f32c81197 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Fri, 22 Oct 2021 14:12:49 +0200 Subject: [PATCH] xwayland: add support for -noTouchPointerEmulation This allows compositors to handle touch pointer emulation manually, instead of having Xwayland do it [1]. [1]: https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/691 --- include/wlr/xwayland.h | 1 + include/xwayland/meson.build | 7 ++++++- xwayland/server.c | 8 ++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/wlr/xwayland.h b/include/wlr/xwayland.h index 3689b8b3..aa9569fe 100644 --- a/include/wlr/xwayland.h +++ b/include/wlr/xwayland.h @@ -22,6 +22,7 @@ struct wlr_xwayland_cursor; struct wlr_xwayland_server_options { bool lazy; bool enable_wm; + bool no_touch_pointer_emulation; }; struct wlr_xwayland_server { diff --git a/include/xwayland/meson.build b/include/xwayland/meson.build index a92234f1..1dad9259 100644 --- a/include/xwayland/meson.build +++ b/include/xwayland/meson.build @@ -1,7 +1,11 @@ have_listenfd = false +have_no_touch_pointer_emulation = false if xwayland.found() xwayland_path = xwayland.get_variable('xwayland') - have_listenfd = xwayland.get_variable('have_listenfd') == 'true' + 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' else xwayland_path = xwayland_prog.full_path() endif @@ -9,6 +13,7 @@ endif 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) configure_file( output: 'config.h', configuration: xwayland_config_data, diff --git a/xwayland/server.c b/xwayland/server.c index 7af01b6f..d8006c44 100644 --- a/xwayland/server.c +++ b/xwayland/server.c @@ -73,6 +73,14 @@ noreturn static void exec_xwayland(struct wlr_xwayland_server *server) { argv[i++] = wmfd; } +#if HAVE_XWAYLAND_NO_TOUCH_POINTER_EMULATION + if (server->options.no_touch_pointer_emulation) { + argv[i++] = "-noTouchPointerEmulation"; + } +#else + server->options.no_touch_pointer_emulation = false; +#endif + argv[i++] = NULL; assert(i < sizeof(argv) / sizeof(argv[0]));