@@ -1339,6 +1339,7 @@ DisplayServer::WindowID DisplayServerWindows::create_sub_window(WindowMode p_mod
13391339 rendering_device->screen_create (window_id);
13401340 }
13411341#endif
1342+ wd.initialized = true ;
13421343 return window_id;
13431344}
13441345
@@ -1895,7 +1896,7 @@ Size2i DisplayServerWindows::window_get_size_with_decorations(WindowID p_window)
18951896 return Size2 ();
18961897}
18971898
1898- void DisplayServerWindows::_get_window_style (bool p_main_window, bool p_fullscreen, bool p_multiwindow_fs, bool p_borderless, bool p_resizable, bool p_maximized, bool p_maximized_fs, bool p_no_activate_focus, DWORD &r_style, DWORD &r_style_ex) {
1899+ void DisplayServerWindows::_get_window_style (bool p_main_window, bool p_initialized, bool p_fullscreen, bool p_multiwindow_fs, bool p_borderless, bool p_resizable, bool p_minimized , bool p_maximized, bool p_maximized_fs, bool p_no_activate_focus, DWORD &r_style, DWORD &r_style_ex) {
18991900 // Windows docs for window styles:
19001901 // https://docs.microsoft.com/en-us/windows/win32/winmsg/window-styles
19011902 // https://docs.microsoft.com/en-us/windows/win32/winmsg/extended-window-styles
@@ -1904,12 +1905,16 @@ void DisplayServerWindows::_get_window_style(bool p_main_window, bool p_fullscre
19041905 r_style_ex = WS_EX_WINDOWEDGE;
19051906 if (p_main_window) {
19061907 r_style_ex |= WS_EX_APPWINDOW;
1907- r_style |= WS_VISIBLE;
1908+ if (p_initialized) {
1909+ r_style |= WS_VISIBLE;
1910+ }
19081911 }
19091912
19101913 if (p_fullscreen || p_borderless) {
19111914 r_style |= WS_POPUP; // p_borderless was WS_EX_TOOLWINDOW in the past.
1912- if (p_maximized) {
1915+ if (p_minimized) {
1916+ r_style |= WS_MINIMIZE;
1917+ } else if (p_maximized) {
19131918 r_style |= WS_MAXIMIZE;
19141919 }
19151920 if (!p_fullscreen) {
@@ -1924,21 +1929,27 @@ void DisplayServerWindows::_get_window_style(bool p_main_window, bool p_fullscre
19241929 }
19251930 } else {
19261931 if (p_resizable) {
1927- if (p_maximized) {
1932+ if (p_minimized) {
1933+ r_style = WS_OVERLAPPEDWINDOW | WS_MINIMIZE;
1934+ } else if (p_maximized) {
19281935 r_style = WS_OVERLAPPEDWINDOW | WS_MAXIMIZE;
19291936 } else {
19301937 r_style = WS_OVERLAPPEDWINDOW;
19311938 }
19321939 } else {
1933- r_style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
1940+ if (p_minimized) {
1941+ r_style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MINIMIZE;
1942+ } else {
1943+ r_style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
1944+ }
19341945 }
19351946 }
19361947
19371948 if (p_no_activate_focus) {
19381949 r_style_ex |= WS_EX_TOPMOST | WS_EX_NOACTIVATE;
19391950 }
19401951
1941- if (!p_borderless && !p_no_activate_focus) {
1952+ if (!p_borderless && !p_no_activate_focus && p_initialized ) {
19421953 r_style |= WS_VISIBLE;
19431954 }
19441955
@@ -1955,7 +1966,7 @@ void DisplayServerWindows::_update_window_style(WindowID p_window, bool p_repain
19551966 DWORD style = 0 ;
19561967 DWORD style_ex = 0 ;
19571968
1958- _get_window_style (p_window == MAIN_WINDOW_ID, wd.fullscreen , wd.multiwindow_fs , wd.borderless , wd.resizable , wd.maximized , wd.maximized_fs , wd.no_focus || wd.is_popup , style, style_ex);
1969+ _get_window_style (p_window == MAIN_WINDOW_ID, wd.initialized , wd. fullscreen , wd.multiwindow_fs , wd.borderless , wd.resizable , wd. minimized , wd.maximized , wd.maximized_fs , wd.no_focus || wd.is_popup , style, style_ex);
19591970
19601971 SetWindowLongPtr (wd.hWnd , GWL_STYLE, style);
19611972 SetWindowLongPtr (wd.hWnd , GWL_EXSTYLE, style_ex);
@@ -5088,7 +5099,7 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
50885099 DWORD dwExStyle;
50895100 DWORD dwStyle;
50905101
5091- _get_window_style (window_id_counter == MAIN_WINDOW_ID, (p_mode == WINDOW_MODE_FULLSCREEN || p_mode == WINDOW_MODE_EXCLUSIVE_FULLSCREEN), p_mode != WINDOW_MODE_EXCLUSIVE_FULLSCREEN, p_flags & WINDOW_FLAG_BORDERLESS_BIT, !(p_flags & WINDOW_FLAG_RESIZE_DISABLED_BIT), p_mode == WINDOW_MODE_MAXIMIZED, false , (p_flags & WINDOW_FLAG_NO_FOCUS_BIT) | (p_flags & WINDOW_FLAG_POPUP), dwStyle, dwExStyle);
5102+ _get_window_style (window_id_counter == MAIN_WINDOW_ID, false , (p_mode == WINDOW_MODE_FULLSCREEN || p_mode == WINDOW_MODE_EXCLUSIVE_FULLSCREEN), p_mode != WINDOW_MODE_EXCLUSIVE_FULLSCREEN, p_flags & WINDOW_FLAG_BORDERLESS_BIT, !(p_flags & WINDOW_FLAG_RESIZE_DISABLED_BIT), p_mode == WINDOW_MODE_MINIMIZED , p_mode == WINDOW_MODE_MAXIMIZED, false , (p_flags & WINDOW_FLAG_NO_FOCUS_BIT) | (p_flags & WINDOW_FLAG_POPUP), dwStyle, dwExStyle);
50925103
50935104 RECT WindowRect;
50945105
@@ -5793,6 +5804,7 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
57935804 }
57945805 }
57955806
5807+ windows[MAIN_WINDOW_ID].initialized = true ;
57965808 show_window (MAIN_WINDOW_ID);
57975809
57985810#if defined(RD_ENABLED)
0 commit comments