summaryrefslogtreecommitdiffstats
path: root/x11-xwayland
diff options
context:
space:
mode:
authorzorz <zorz@krypt.sh>2026-04-01 22:52:53 +0300
committerzorz <zorz@krypt.sh>2026-04-01 22:52:53 +0300
commit510ee94dc6c7b011ba95816e50d4faa8352f5e71 (patch)
treebdebaf589f9aae422a653a29b529008513f072c3 /x11-xwayland
parente304d10a0993bda38d3bda2c0a9f33443ba82212 (diff)
downloadxorg-510ee94dc6c7b011ba95816e50d4faa8352f5e71.tar.gz
xorg-510ee94dc6c7b011ba95816e50d4faa8352f5e71.tar.xz
Diffstat (limited to 'x11-xwayland')
-rw-r--r--x11-xwayland/2113.patch52
-rw-r--r--x11-xwayland/MAKEPKG38
2 files changed, 90 insertions, 0 deletions
diff --git a/x11-xwayland/2113.patch b/x11-xwayland/2113.patch
new file mode 100644
index 0000000..d867629
--- /dev/null
+++ b/x11-xwayland/2113.patch
@@ -0,0 +1,52 @@
1From 7fb5e00ad86ca862024ad7be83c670aacf805d09 Mon Sep 17 00:00:00 2001
2From: Liu Heng <liuhenga@uniontech.com>
3Date: Fri, 12 Dec 2025 19:34:16 +0800
4Subject: [PATCH] xwayland: Fix incorrect pointer coordinates in enter events
5
6Xwayland was sending incorrect pointer coordinates to X clients on
7pointer enter events.
8
9This was caused by calling CheckMotion() with a NULL event, which
10prevented the pointer sprite hot coordinates from being updated
11properly.
12
13Fix this by constructing a proper DeviceEvent of type ET_Enter in
14pointer_handle_enter, initializing it with the current timestamp
15and EVENT_SOURCE_FOCUS, and passing it to CheckMotion() instead
16of NULL.
17
18This ensures the pointer sprite coordinates are correctly updated
19when the pointer enters a window.
20
21Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2113>
22---
23 hw/xwayland/xwayland-input.c | 5 ++++-
24 1 file changed, 4 insertions(+), 1 deletion(-)
25
26diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
27index cd2046e1d4..447627dc63 100644
28--- a/hw/xwayland/xwayland-input.c
29+++ b/hw/xwayland/xwayland-input.c
30@@ -528,6 +528,7 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer,
31 int dx, dy;
32 ScreenPtr pScreen = xwl_screen->screen;
33 ValuatorMask mask;
34+ DeviceEvent enter;
35
36 /* There's a race here where if we create and then immediately
37 * destroy a surface, we might end up in a state where the Wayland
38@@ -558,8 +559,10 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer,
39 (*pScreen->SetCursorPosition) (dev, pScreen, dx + sx, dy + sy, TRUE);
40
41 miPointerInvalidateSprite(master);
42+ init_device_event(&enter, dev, currentTime.milliseconds, EVENT_SOURCE_FOCUS);
43+ enter.type = ET_Enter;
44
45- CheckMotion(NULL, master);
46+ CheckMotion(&enter, master);
47
48 /* Ideally, X clients shouldn't see these button releases. When
49 * the pointer leaves a window with buttons down, it means that
50--
51GitLab
52
diff --git a/x11-xwayland/MAKEPKG b/x11-xwayland/MAKEPKG
new file mode 100644
index 0000000..02eb2e7
--- /dev/null
+++ b/x11-xwayland/MAKEPKG
@@ -0,0 +1,38 @@
1#!/bin/mkpkg
2# description: X server for Wayland compatibility
3# url: https://wayland.freedesktop.org/
4
5name=x11-xwayland
6version=24.1.9
7release=1
8depends=(wayland nettle libxfont2 libxres libxshmfence
9 libxtst libpixman xkbcomp)
10makedeps=(meson)
11source=(https://xorg.freedesktop.org/releases/individual/xserver/xwayland-$version.tar.xz
12 2113.patch)
13
14patch() {
15 cd xwayland-$version
16 patch -p1 -i $SRC/2113.patch
17}
18
19build() {
20 meson setup xwayland-$version build \
21 --prefix=/usr \
22 --buildtype=plain \
23 -D xkb_dir=/usr/share/X11/xkb \
24 -D xkb_output_dir=/var/lib/xkb
25
26 meson compile -C build
27 DESTDIR=$PKG meson install -C build
28
29 rm -f $PKG/usr/lib/xorg/protocol.txt
30 rm -f $PKG/usr/share/man/man1/Xserver.1
31}
32
33signify() {
34 untrusted comment: public key
35 RWTZ9IduCSQ/mL8337TEUinPwT92xFEUpD92hkS7IxcOnzTt9QdpohT3
36}
37
38# vim: filetype=sh