diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index 4d4df9e940..1a91e03d7d 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -2072,7 +2072,19 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara return ret; \ } case SDL_HITTEST_DRAGGABLE: + { + /* If the mouse button state is something other than none or left button down, + * return HTCLIENT, or Windows will eat the button press. + */ + SDL_MouseButtonFlags buttonState = SDL_GetGlobalMouseState(NULL, NULL); + if (buttonState && !(buttonState & SDL_BUTTON_LMASK)) { + // Set focus in case it was lost while previously moving over a draggable area. + SDL_SetMouseFocus(window); + return HTCLIENT; + } + POST_HIT_TEST(HTCAPTION); + } case SDL_HITTEST_RESIZE_TOPLEFT: POST_HIT_TEST(HTTOPLEFT); case SDL_HITTEST_RESIZE_TOP: