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.
This commit is contained in:
Ryan C. Gordon 2024-01-18 15:10:16 -05:00
parent f52a12a8fe
commit cc7fe8c255
No known key found for this signature in database
GPG key ID: FA148B892AB48044

View file

@ -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) {