Skip to content

Commit e1cb65b

Browse files
committed
Apply WS_MINIMIZE style on window creation
1 parent b9e0223 commit e1cb65b

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

platform/windows/display_server_windows.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

platform/windows/display_server_windows.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,8 @@ class DisplayServerWindows : public DisplayServer {
445445

446446
bool is_popup = false;
447447
Rect2i parent_safe_rect;
448+
449+
bool initialized = false;
448450
};
449451

450452
JoypadWindows *joypad = nullptr;
@@ -472,7 +474,7 @@ class DisplayServerWindows : public DisplayServer {
472474
HashMap<IndicatorID, IndicatorData> indicators;
473475

474476
void _send_window_event(const WindowData &wd, WindowEvent p_event);
475-
void _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);
477+
void _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);
476478

477479
MouseMode mouse_mode;
478480
int restore_mouse_trails = 0;

0 commit comments

Comments
 (0)