Make sure we don't clip the cursor while clicking on the window title bar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c
index a688ef0..b4e51a0 100644
--- a/src/video/windows/SDL_windowsevents.c
+++ b/src/video/windows/SDL_windowsevents.c
@@ -570,6 +570,20 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
break;
#endif /* WM_INPUTLANGCHANGE */
+ case WM_NCLBUTTONDOWN:
+ {
+ data->in_title_click = SDL_TRUE;
+ WIN_UpdateClipCursor(data->window);
+ }
+ break;
+
+ case WM_NCMOUSELEAVE:
+ {
+ data->in_title_click = SDL_FALSE;
+ WIN_UpdateClipCursor(data->window);
+ }
+ break;
+
case WM_ENTERSIZEMOVE:
case WM_ENTERMENULOOP:
{
diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c
index 98de454..425b4da 100644
--- a/src/video/windows/SDL_windowswindow.c
+++ b/src/video/windows/SDL_windowswindow.c
@@ -746,7 +746,7 @@ WIN_UpdateClipCursor(SDL_Window *window)
SDL_Mouse *mouse = SDL_GetMouse();
/* Don't clip the cursor while we're in the modal resize or move loop */
- if (data->in_modal_loop) {
+ if (data->in_title_click || data->in_modal_loop) {
ClipCursor(NULL);
return;
}
diff --git a/src/video/windows/SDL_windowswindow.h b/src/video/windows/SDL_windowswindow.h
index 99ae488..c428887 100644
--- a/src/video/windows/SDL_windowswindow.h
+++ b/src/video/windows/SDL_windowswindow.h
@@ -38,6 +38,7 @@ typedef struct
SDL_bool created;
WPARAM mouse_button_flags;
BOOL expected_resize;
+ SDL_bool in_title_click;
SDL_bool in_modal_loop;
struct SDL_VideoData *videodata;
#if SDL_VIDEO_OPENGL_EGL