From cc7fe8c255ca8f3b4f5407c0c70103b4c7ad8168 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Thu, 18 Jan 2024 15:10:16 -0500
Subject: [PATCH] x11: XI_Motion should mark the global mouse position as
changed.
Otherwise we'll miss it when XWarpPointer() is used. x11vnc may do this to
manage mouse input in some circumstances, so it can be possible for _all_
mouse motion to go through this path, breaking SDL_GetGlobalMouseState().
Thanks to @chrismile for all the detective work to figure this out!
Fixes #8827.
---
src/video/x11/SDL_x11xinput2.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/video/x11/SDL_x11xinput2.c b/src/video/x11/SDL_x11xinput2.c
index 1bb710dba544..afed85817442 100644
--- a/src/video/x11/SDL_x11xinput2.c
+++ b/src/video/x11/SDL_x11xinput2.c
@@ -337,6 +337,8 @@ int X11_HandleXinput2Event(SDL_VideoData *videodata, XGenericEventCookie *cookie
const XIDeviceEvent *xev = (const XIDeviceEvent *)cookie->data;
int pointer_emulated = (xev->flags & XIPointerEmulated);
+ videodata->global_mouse_changed = SDL_TRUE;
+
if (!pointer_emulated) {
SDL_Mouse *mouse = SDL_GetMouse();
if (!mouse->relative_mode || mouse->relative_mode_warp) {