From dd0bdc256101adb931866299b7c3ad07d13c51e7 Mon Sep 17 00:00:00 2001
From: Frank Praznik <[EMAIL REDACTED]>
Date: Wed, 15 Jan 2025 14:45:48 -0500
Subject: [PATCH] win32: Pass through non-left mouse button presses when over
draggable areas
Returning anything other an HTCLIENT result will cause windows to eat the button press, so ensure that non-left presses are passed through to the client over draggable areas.
---
src/video/windows/SDL_windowsevents.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c
index 4d4df9e940915..1a91e03d7d7e0 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: