From 649466f4915b68cfa75e802bef7ee192b2192684 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 7 Oct 2021 13:28:44 -0700 Subject: [PATCH] Flush any pending mouse motion when warping the mouse cursor Fixes https://github.com/libsdl-org/SDL/issues/4165 --- src/video/windows/SDL_windowsmouse.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/video/windows/SDL_windowsmouse.c b/src/video/windows/SDL_windowsmouse.c index da775fe13..2492243cd 100644 --- a/src/video/windows/SDL_windowsmouse.c +++ b/src/video/windows/SDL_windowsmouse.c @@ -251,6 +251,18 @@ WIN_WarpMouse(SDL_Window * window, int x, int y) pt.y = y; ClientToScreen(hwnd, &pt); SetCursorPos(pt.x, pt.y); + + /* Flush any pending mouse motion and simulate motion for this warp */ + { + SDL_Mouse *mouse = SDL_GetMouse(); + const SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + MSG msg; + + while (PeekMessage(&msg, data->hwnd, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE)) { + continue; + } + SDL_SendMouseMotion(window, mouse->mouseID, 0, x, y); + } } static int