Skip to content

Commit 36837bf

Browse files
committed
Merge pull request #91487 from shatyuka/window-style
Apply `WS_MINIMIZE` style on window creation
2 parents de07df5 + e1cb65b commit 36837bf

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
@@ -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)

platform/windows/display_server_windows.h

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

525525
bool is_popup = false;
526526
Rect2i parent_safe_rect;
527+
528+
bool initialized = false;
527529
};
528530

529531
JoypadWindows *joypad = nullptr;
@@ -591,7 +593,7 @@ class DisplayServerWindows : public DisplayServer {
591593
HashMap<int64_t, Vector2> pointer_last_pos;
592594

593595
void _send_window_event(const WindowData &wd, WindowEvent p_event);
594-
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);
596+
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);
595597

596598
MouseMode mouse_mode;
597599
int restore_mouse_trails = 0;

0 commit comments

Comments
 (0)