From de196c8550dfd3317043fcc71de1506ac076e14f Mon Sep 17 00:00:00 2001 From: zorz Date: Fri, 27 Feb 2026 17:37:23 +0200 Subject: Initial commit: xorg/x11 ports --- x11-xwayland/2113.patch | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 x11-xwayland/2113.patch (limited to 'x11-xwayland/2113.patch') 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 @@ +From 7fb5e00ad86ca862024ad7be83c670aacf805d09 Mon Sep 17 00:00:00 2001 +From: Liu Heng +Date: Fri, 12 Dec 2025 19:34:16 +0800 +Subject: [PATCH] xwayland: Fix incorrect pointer coordinates in enter events + +Xwayland was sending incorrect pointer coordinates to X clients on +pointer enter events. + +This was caused by calling CheckMotion() with a NULL event, which +prevented the pointer sprite hot coordinates from being updated +properly. + +Fix this by constructing a proper DeviceEvent of type ET_Enter in +pointer_handle_enter, initializing it with the current timestamp +and EVENT_SOURCE_FOCUS, and passing it to CheckMotion() instead +of NULL. + +This ensures the pointer sprite coordinates are correctly updated +when the pointer enters a window. + +Part-of: +--- + hw/xwayland/xwayland-input.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c +index cd2046e1d4..447627dc63 100644 +--- a/hw/xwayland/xwayland-input.c ++++ b/hw/xwayland/xwayland-input.c +@@ -528,6 +528,7 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer, + int dx, dy; + ScreenPtr pScreen = xwl_screen->screen; + ValuatorMask mask; ++ DeviceEvent enter; + + /* There's a race here where if we create and then immediately + * destroy a surface, we might end up in a state where the Wayland +@@ -558,8 +559,10 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer, + (*pScreen->SetCursorPosition) (dev, pScreen, dx + sx, dy + sy, TRUE); + + miPointerInvalidateSprite(master); ++ init_device_event(&enter, dev, currentTime.milliseconds, EVENT_SOURCE_FOCUS); ++ enter.type = ET_Enter; + +- CheckMotion(NULL, master); ++ CheckMotion(&enter, master); + + /* Ideally, X clients shouldn't see these button releases. When + * the pointer leaves a window with buttons down, it means that +-- +GitLab + -- cgit v1.2.3