xserver/hw/xwayland
Peter Hutterer a133334270 xwayland: Add XTEST support using EIS
This adds support for XTEST in Xwayland using EIS, the emulated input
library [1].

To differentiate between X11 clients using XTEST, initiate a EI context
for each client and use the actual client name, from its command
line.

When an X11 client first tries to use XTEST to generate emulated input
events, a new connection to libEI is initiated by Xwayland on behalf
of the X11 client.

During that connection phase, the EI server will not be accepting
events until the emulated device is actually created, meaning that any
XTEST request from the X11 client will be discarded until the EI server
is willing to accept events.

To avoid that issue, add an event queue in Xwayland per X11 client that
will keep those requests, and dequeue them as soon as the EI server is
ready, i.e. once the EI device is added.

If the X11 client disconnects from the Xserver before the EI server is
ready, or if the connection is closed by the EI server, those events are
discarded and the queue cleared from any pending events.

For 10 minutes after the client disconnects, keep the internal struct
alive. If a client with the same commandline arguments connects again,
re-use the same struct. This means we are faster with the events the
second time around but it also allows the EIS server to pause individual
clients that keep sending intermittent events and disconnect immediately
(e.g. it'd be possible to pause xdtotool while an authentication prompt
is active).

[1] https://gitlab.freedesktop.org/libinput/libei

Thanks to Jan Beich <jbeich@FreeBSD.org> for fixing the build on BSD.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Co-authored-by: Olivier Fourdan <ofourdan@redhat.com>
Co-authored-by: David Redondo <kde@david-redondo.de>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
2023-06-26 13:19:19 +02:00
..
desktop xwayland: set the app_id and install a desktop launcher 2022-06-30 17:53:01 +02:00
man xwayland: add optional support for libdecor 2022-06-30 17:53:01 +02:00
.gitignore xwayland: Add wp_viewport wayland extension support 2019-10-12 12:19:14 +02:00
drm.xml wayland: Sync drm.xml with Mesa 2017-07-05 10:13:04 -04:00
meson.build xwayland: Add XTEST support using EIS 2023-06-26 13:19:19 +02:00
xwayland-cursor.c xwayland: Fix cursor color 2022-02-11 10:33:10 +01:00
xwayland-cursor.h xwayland: Add xwl_cursor_clear_frame_cb() 2021-10-25 12:05:42 +00:00
xwayland-cvt.c xwayland: Keep the CVT timings for non-standard modes 2023-05-15 10:33:21 +02:00
xwayland-cvt.h xwayland: Move Xwayland CVT declaration 2019-12-20 16:19:01 +01:00
xwayland-drm-lease.c xwayland: make the output serials belong to the screen 2022-06-30 16:33:30 +02:00
xwayland-drm-lease.h Xwayland: implement drm-lease-v1 2021-12-07 10:02:29 +00:00
xwayland-glamor-eglstream.c xwayland: Add get_drawable_modifiers implementation 2023-01-20 17:56:54 +00:00
xwayland-glamor-gbm.c xwayland/glamor/gbm: Use EGL_NO_CONTEXT with EGL_NATIVE_PIXMAP_KHR 2023-06-21 15:46:56 +00:00
xwayland-glamor-xv.c xwayland: Cleanup and remove `xwayland.h` 2019-12-20 16:19:01 +01:00
xwayland-glamor.c xwayland: Add xwl_glamor_get_drawable_modifiers_and_scanout() 2023-04-12 10:44:25 +02:00
xwayland-glamor.h xwayland: Add xwl_glamor_get_drawable_modifiers_and_scanout() 2023-04-12 10:44:25 +02:00
xwayland-glx.c xwayland/glx: Mirror all EGLConfigs 2022-12-06 12:48:58 -05:00
xwayland-glx.h xwayland: Move Xwayland GLX declaration 2019-12-20 16:19:01 +01:00
xwayland-input.c xwayland: Add XTEST support using EIS 2023-06-26 13:19:19 +02:00
xwayland-input.h xwayland: hook up wl_pointer.axis_v120 events 2023-01-18 13:33:54 +10:00
xwayland-output.c xwayland: Use our CVT function for fixed mode as well 2023-05-11 17:01:52 +02:00
xwayland-output.h xwayland: Pass the wl_output version 2023-02-13 14:41:05 +01:00
xwayland-pixmap.c xwayland: Rename xwl_pixmap_cb → xwl_buffer_release_cb 2020-07-07 13:47:11 +00:00
xwayland-pixmap.h xwayland: Rename xwl_pixmap_cb → xwl_buffer_release_cb 2020-07-07 13:47:11 +00:00
xwayland-present.c xwayland: add support for wp-tearing-control-v1 2023-06-19 12:19:35 +02:00
xwayland-present.h xwayland: add support for wp-tearing-control-v1 2023-06-19 12:19:35 +02:00
xwayland-screen.c xwayland: Add XTEST support using EIS 2023-06-26 13:19:19 +02:00
xwayland-screen.h xwayland: add support for wp-tearing-control-v1 2023-06-19 12:19:35 +02:00
xwayland-shm.c xwayland/shm: Avoid integer overflow on large pixmaps 2021-10-05 10:00:02 +00:00
xwayland-shm.h xwayland: Move SHM declarations to their own header 2019-12-20 16:19:01 +01:00
xwayland-types.h Xwayland: implement drm-lease-v1 2021-12-07 10:02:29 +00:00
xwayland-vidmode.c xwayland: add a fixed geometry size for rootful 2022-06-30 17:52:22 +02:00
xwayland-vidmode.h xwayland: Move Xwayland vidmode declaration 2019-12-20 16:19:01 +01:00
xwayland-window-buffers.c xwayland: Try the Xwayland glamor hook to create pixmaps 2023-04-03 11:46:15 +02:00
xwayland-window-buffers.h xwayland: Cleanup and remove `xwayland.h` 2019-12-20 16:19:01 +01:00
xwayland-window.c xwayland: add support for wp-tearing-control-v1 2023-06-19 12:19:35 +02:00
xwayland-window.h xwayland: add support for wp-tearing-control-v1 2023-06-19 12:19:35 +02:00
xwayland-xtest.c xwayland: Add XTEST support using EIS 2023-06-26 13:19:19 +02:00
xwayland-xtest.h xwayland: Add XTEST support using EIS 2023-06-26 13:19:19 +02:00
xwayland.c xwayland: Make Wayland logs non-fatal 2023-04-07 13:53:12 +02:00