diff --git a/src/input.c b/src/input.c
index d802731f..78cce44c 100644
--- a/src/input.c
+++ b/src/input.c
@@ -1299,11 +1299,17 @@ int Get_input(int sleep_time)
break;
case SDL_MOUSEBUTTONDOWN:
+#ifdef USE_SDL2
+ SDL_CaptureMouse(SDL_TRUE);
+#endif
Handle_mouse_click(&event.button);
user_feedback_required = 1;
break;
case SDL_MOUSEBUTTONUP:
+#ifdef USE_SDL2
+ SDL_CaptureMouse(SDL_FALSE);
+#endif
Handle_mouse_release(&event.button);
user_feedback_required = 1;
break;
diff --git a/src/win32screen.c b/src/win32screen.c
index 808d8403..36ecf6e1 100644
--- a/src/win32screen.c
+++ b/src/win32screen.c
@@ -21,6 +21,7 @@
along with Grafx2; if not, see
*/
#include
+#include
#include
#include
#if defined(_MSC_VER) && _MSC_VER < 1900
@@ -208,32 +209,38 @@ static LRESULT CALLBACK Win32_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
}
return 0;
case WM_LBUTTONDOWN:
+ SetCapture(hwnd); // capture mouse when the button is pressed
Input_new_mouse_K |= 1;
Move_cursor_with_constraints(0);
user_feedback_required = 1;
return 0;
case WM_LBUTTONUP:
+ ReleaseCapture(); // Release mouse when the button is released
Input_new_mouse_K &= ~1;
Move_cursor_with_constraints(0);
user_feedback_required = 1;
return 0;
// WM_LBUTTONDBLCLK
case WM_RBUTTONDOWN:
+ SetCapture(hwnd); // capture mouse when the button is pressed
Input_new_mouse_K |= 2;
Move_cursor_with_constraints(0);
user_feedback_required = 1;
return 0;
case WM_RBUTTONUP:
+ ReleaseCapture(); // Release mouse when the button is released
Input_new_mouse_K &= ~2;
Move_cursor_with_constraints(0);
user_feedback_required = 1;
return 0;
// WM_RBUTTONDBLCLK
case WM_MBUTTONDOWN:
- //case WM_MBUTTONUP:
Key = KEY_MOUSEMIDDLE|Get_Key_modifiers();
user_feedback_required = 1;
return 0;
+ case WM_MBUTTONUP:
+ return 0;
+// WM_MBUTTONDBLCLK
case WM_MOUSEWHEEL:
{
short delta = HIWORD(wParam);