Flush any pending mouse motion when warping the mouse cursor

Fixes https://github.com/libsdl-org/SDL/issues/4165
This commit is contained in:
Sam Lantinga 2021-10-07 13:28:44 -07:00
parent ad5205739e
commit 649466f491
1 changed files with 12 additions and 0 deletions

View File

@ -251,6 +251,18 @@ WIN_WarpMouse(SDL_Window * window, int x, int y)
pt.y = y; pt.y = y;
ClientToScreen(hwnd, &pt); ClientToScreen(hwnd, &pt);
SetCursorPos(pt.x, pt.y); 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 static int