xserver/include
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
..
.gitignore Fix spelling/wording issues 2020-07-05 13:07:33 -07:00
XIstubs.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
Xprintf.h Remove "All rights reserved" from Oracle copyright notices 2023-02-25 09:40:41 -08:00
Xserver.d Remove "All rights reserved" from Oracle copyright notices 2023-02-25 09:40:41 -08:00
busfault.h Trap SIGBUS to handle truncated shared memory segments 2013-11-11 15:16:07 -08:00
callback.h Avoid starting a comment with */* 2014-07-17 10:19:52 -07:00
client.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
closestr.h Replace 'pointer' type with 'void *' 2014-01-12 10:24:11 -08:00
closure.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
colormap.h dix: Unexport various implementation details 2015-07-08 16:40:57 -04:00
colormapst.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
cursor.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
cursorstr.h cursor: drop ARGB_CURSOR 2015-06-30 12:17:51 +10:00
dbus-core.h xfree86: drop double-typedef of DBusConnection 2014-11-12 10:25:00 +10:00
displaymode.h vidmode: move display mode definitions 2016-02-29 16:28:57 -05:00
dix-config-apple-verbatim.h Move the apple fat binary hacks back to a header file, and make it apple-only. 2009-01-30 16:36:45 -08:00
dix.h Convert more funcs to use InternalEvent. 2021-12-19 20:01:04 +00:00
dixaccess.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
dixevents.h dix: Remove redundant declarations. 2012-05-14 13:31:00 +01:00
dixfont.h include: Stop including <X11/fonts/fontproto.h> 2018-10-25 12:32:48 -04:00
dixfontstr.h dix: Switch to the libXfont2 API (v2) 2016-07-18 15:25:59 -04:00
dixgrabs.h xi: Implement grab support for new gesture event types 2021-05-30 13:26:32 +03:00
dixstruct.h os: Define {ReadFdFrom,WriteFdTo}Client unconditionally 2018-03-08 14:12:36 -05:00
eventconvert.h dix: Add new internal event enums for gesture events 2021-05-30 13:26:30 +03:00
events.h xi: Implement internal gesture event struct 2021-05-30 13:26:31 +03:00
eventstr.h xi: Implement internal gesture event struct 2021-05-30 13:26:31 +03:00
exevents.h xi: Implement grab support for new gesture event types 2021-05-30 13:26:32 +03:00
extension.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
extinit.h Allow disabling the SHAPE extension at runtime 2023-03-03 18:28:40 +00:00
extnsionst.h dix: Remove extension aliases 2017-06-20 16:37:24 -04:00
fourcc.h Consolidate fourcc.h 2020-09-15 11:43:16 +02:00
gc.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
gcstruct.h fb: Remove 24bpp support (v3) 2017-03-17 15:14:42 -04:00
globals.h miinitext: General cleanup (v2) 2018-01-22 17:28:12 -05:00
glx_extinit.h miinitext: Load GLX on the mi path 2018-02-14 17:04:48 -05:00
glxvndabi.h Fix spelling/wording issues 2020-07-05 13:07:33 -07:00
hotplug.h config: Replace OdevAttributes linked list with struct 2014-07-17 17:10:48 -07:00
input.h input: Add new hook DeviceSendEventsProc for XTEST 2023-06-26 13:19:19 +02:00
inputstr.h input: Add new hook DeviceSendEventsProc for XTEST 2023-06-26 13:19:19 +02:00
inpututils.h Implement gesture processing logic 2021-05-30 13:26:42 +03:00
list.h Correct xorg_list_is_empty return value description 2018-02-12 08:09:53 +10:00
meson.build xwayland: Add XTEST support using EIS 2023-06-26 13:19:19 +02:00
misc.h include: Increase the number of max. input devices to 256. 2019-11-09 23:05:13 -05:00
miscstruct.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
nonsdk_extinit.h Make PseudoramiXExtensionInit() prototype more generally available 2015-03-16 16:56:17 +00:00
opaque.h Disallow byte-swapped clients by default 2023-01-06 11:59:37 +10:00
optionstr.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
os.h os: Ensure sigset_t is provided when compiling for MinGW 2019-05-18 14:59:38 +00:00
pixmap.h dix: Remove pScratchPixmap and other associated ABI changes 2022-12-30 01:32:25 +00:00
pixmapstr.h rootless: Use screen_x and screen_y instead of pixmap pointer hacks 2023-01-20 17:10:54 +00:00
privates.h Fix compilation with windows.h from latest w32api 2021-08-31 16:56:28 +00:00
probes.h Remove "All rights reserved" from Oracle copyright notices 2023-02-25 09:40:41 -08:00
property.h Mark the dixChangeWindowProperty() value argument as const 2021-07-30 08:36:35 +00:00
propertyst.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
protocol-versions.h xfixes: Add ClientDisconnectMode 2021-06-07 17:28:05 +02:00
ptrveloc.h dix: indentation fixes for pointer acceleration 2012-05-16 10:59:35 +10:00
region.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
regionstr.h dix: make RegionInit legal C++ 2015-01-23 10:35:49 -08:00
registry.h XSERVER_DTRACE needs request names from registry too 2014-09-22 12:00:46 -07:00
resource.h dix: Fix undefined shift in HashResourceID 2019-10-15 14:06:21 -04:00
rgb.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
screenint.h dix: De-ugly the prototype for Add{GPU,}Screen 2018-10-30 12:21:41 -04:00
scrnintstr.h dix: Remove pScratchPixmap and other associated ABI changes 2022-12-30 01:32:25 +00:00
selection.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
servermd.h dix: Fix image byte order on big endian hardware 2015-05-07 14:03:50 -04:00
swaprep.h dix: Unexport various implementation details 2015-07-08 16:40:57 -04:00
swapreq.h dix: Unexport various implementation details 2015-07-08 16:40:57 -04:00
systemd-logind.h xf86/logind: Fix compilation error when built without logind/platform bus 2021-12-20 16:56:14 +01:00
validate.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
vidmodestr.h vidmode: build without xf86vidmodeproto 2016-03-01 11:25:59 -05:00
window.h dix: Add hybrid full-size/empty-clip mode to SetRootClip 2016-02-22 13:26:31 -05:00
windowstr.h dix: Remove WindowRec::backStorage 2019-04-12 21:53:03 +00:00
xkb-config.h.in Move to autoconf standard function name checks & defines 2011-12-05 14:32:45 -08:00
xkbfile.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
xkbrules.h xkb: add a call to init an XkbRMLVOSet from const chars 2014-02-04 10:53:59 +10:00
xkbsrv.h dix: Force update LEDs after device state update in EnableDevice 2023-02-21 03:43:05 +00:00
xkbstr.h Fix spelling/wording issues 2020-07-05 13:07:33 -07:00
xorg-config.h.meson.in xf86AutoConfig: try modesetting on all platforms we build it on 2022-09-20 18:26:03 +00:00
xorg-server.h.meson.in meson: Generate xorg-server.h 2018-03-28 09:54:22 -04:00
xserver-properties.h Add missing labels for multitouch valuators 2012-10-30 15:11:10 +10:00
xserver_poll.h Fix typo in error message 2019-01-10 18:40:20 +02:00
xsha1.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
xwayland-config.h.meson.in xwayland: Add XTEST support using EIS 2023-06-26 13:19:19 +02:00
xwin-config.h.meson.in Add meson.build for XWin server (v2) 2017-06-02 09:32:35 -07:00