@@ -1520,6 +1520,7 @@ DisplayServer::WindowID DisplayServerWindows::create_sub_window(WindowMode p_mod
15201520 rendering_device->screen_create (window_id);
15211521 }
15221522#endif
1523+ wd.initialized = true ;
15231524 return window_id;
15241525}
15251526
@@ -2065,7 +2066,7 @@ Size2i DisplayServerWindows::window_get_size_with_decorations(WindowID p_window)
20652066 return Size2 ();
20662067}
20672068
2068- 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) {
2069+ 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) {
20692070 // Windows docs for window styles:
20702071 // https://docs.microsoft.com/en-us/windows/win32/winmsg/window-styles
20712072 // https://docs.microsoft.com/en-us/windows/win32/winmsg/extended-window-styles
@@ -2074,12 +2075,16 @@ void DisplayServerWindows::_get_window_style(bool p_main_window, bool p_fullscre
20742075 r_style_ex = WS_EX_WINDOWEDGE;
20752076 if (p_main_window) {
20762077 r_style_ex |= WS_EX_APPWINDOW;
2077- r_style |= WS_VISIBLE;
2078+ if (p_initialized) {
2079+ r_style |= WS_VISIBLE;
2080+ }
20782081 }
20792082
20802083 if (p_fullscreen || p_borderless) {
20812084 r_style |= WS_POPUP; // p_borderless was WS_EX_TOOLWINDOW in the past.
2082- if (p_maximized) {
2085+ if (p_minimized) {
2086+ r_style |= WS_MINIMIZE;
2087+ } else if (p_maximized) {
20832088 r_style |= WS_MAXIMIZE;
20842089 }
20852090 if (!p_fullscreen) {
@@ -2094,21 +2099,27 @@ void DisplayServerWindows::_get_window_style(bool p_main_window, bool p_fullscre
20942099 }
20952100 } else {
20962101 if (p_resizable) {
2097- if (p_maximized) {
2102+ if (p_minimized) {
2103+ r_style = WS_OVERLAPPEDWINDOW | WS_MINIMIZE;
2104+ } else if (p_maximized) {
20982105 r_style = WS_OVERLAPPEDWINDOW | WS_MAXIMIZE;
20992106 } else {
21002107 r_style = WS_OVERLAPPEDWINDOW;
21012108 }
21022109 } else {
2103- r_style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
2110+ if (p_minimized) {
2111+ r_style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MINIMIZE;
2112+ } else {
2113+ r_style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
2114+ }
21042115 }
21052116 }
21062117
21072118 if (p_no_activate_focus) {
21082119 r_style_ex |= WS_EX_TOPMOST | WS_EX_NOACTIVATE;
21092120 }
21102121
2111- if (!p_borderless && !p_no_activate_focus) {
2122+ if (!p_borderless && !p_no_activate_focus && p_initialized ) {
21122123 r_style |= WS_VISIBLE;
21132124 }
21142125
@@ -2125,7 +2136,7 @@ void DisplayServerWindows::_update_window_style(WindowID p_window, bool p_repain
21252136 DWORD style = 0 ;
21262137 DWORD style_ex = 0 ;
21272138
2128- _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);
2139+ _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);
21292140
21302141 SetWindowLongPtr (wd.hWnd , GWL_STYLE, style);
21312142 SetWindowLongPtr (wd.hWnd , GWL_EXSTYLE, style_ex);
@@ -5536,7 +5547,7 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
55365547 DWORD dwExStyle;
55375548 DWORD dwStyle;
55385549
5539- _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);
5550+ _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);
55405551
55415552 RECT WindowRect;
55425553
@@ -6368,6 +6379,7 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
63686379 }
63696380 }
63706381
6382+ windows[MAIN_WINDOW_ID].initialized = true ;
63716383 show_window (MAIN_WINDOW_ID);
63726384
63736385#if defined(RD_ENABLED)
0 commit comments