diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index b1736bdbd8e..9233ce58ee9 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -2469,6 +2469,21 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window) } } + if ((wd.maximized || wd.was_maximized_pre_fs) && wd.borderless && p_mode != WINDOW_MODE_MINIMIZED && p_mode != WINDOW_MODE_FULLSCREEN && p_mode != WINDOW_MODE_EXCLUSIVE_FULLSCREEN) { + RECT rect; + if (wd.pre_fs_valid) { + rect = wd.pre_fs_rect; + } else { + rect.left = 0; + rect.right = wd.width; + rect.top = 0; + rect.bottom = wd.height; + } + + ShowWindow(wd.hWnd, SW_RESTORE); + MoveWindow(wd.hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); + } + if (p_mode == WINDOW_MODE_WINDOWED) { ShowWindow(wd.hWnd, SW_NORMAL); wd.maximized = false; @@ -2482,6 +2497,11 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window) } if (p_mode == WINDOW_MODE_MAXIMIZED && wd.borderless) { + if (!was_fullscreen && !(wd.maximized && wd.borderless)) { + // Save non-fullscreen rect before entering fullscreen. + GetWindowRect(wd.hWnd, &wd.pre_fs_rect); + wd.pre_fs_valid = true; + } ShowWindow(wd.hWnd, SW_NORMAL); wd.maximized = true; wd.minimized = false; @@ -2515,7 +2535,7 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window) // Save previous maximized stare. wd.was_maximized_pre_fs = wd.maximized; - if (!was_fullscreen) { + if (!was_fullscreen && !(wd.maximized && wd.borderless)) { // Save non-fullscreen rect before entering fullscreen. GetWindowRect(wd.hWnd, &wd.pre_fs_rect); wd.pre_fs_valid = true;