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