Skip to content

Commit c28dd31

Browse files
committed
Merge pull request #97757 from bruvzg/max_move_screen
Fix `window_set_current_screen` for maximized windows.
2 parents 34920b4 + d2f3725 commit c28dd31

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

platform/linuxbsd/x11/display_server_x11.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2055,7 +2055,7 @@ void DisplayServerX11::window_set_current_screen(int p_screen, WindowID p_window
20552055
return;
20562056
}
20572057

2058-
if (window_get_mode(p_window) == WINDOW_MODE_FULLSCREEN) {
2058+
if (window_get_mode(p_window) == WINDOW_MODE_FULLSCREEN || window_get_mode(p_window) == WINDOW_MODE_MAXIMIZED) {
20592059
Point2i position = screen_get_position(p_screen);
20602060
Size2i size = screen_get_size(p_screen);
20612061

platform/macos/display_server_macos.mm

+10
Original file line numberDiff line numberDiff line change
@@ -1893,6 +1893,12 @@
18931893
was_fullscreen = true;
18941894
}
18951895

1896+
bool was_maximized = false;
1897+
if (!was_fullscreen && NSEqualRects([wd.window_object frame], [[wd.window_object screen] visibleFrame])) {
1898+
[wd.window_object zoom:nil];
1899+
was_maximized = true;
1900+
}
1901+
18961902
Rect2i srect = screen_get_usable_rect(p_screen);
18971903
Point2i wpos = window_get_position(p_window) - screen_get_position(window_get_current_screen(p_window));
18981904
Size2i wsize = window_get_size(p_window);
@@ -1901,6 +1907,10 @@
19011907
wpos = wpos.clamp(srect.position, srect.position + srect.size - wsize / 3);
19021908
window_set_position(wpos, p_window);
19031909

1910+
if (was_maximized) {
1911+
[wd.window_object zoom:nil];
1912+
}
1913+
19041914
if (was_fullscreen) {
19051915
// Re-enter fullscreen mode.
19061916
[wd.window_object toggleFullScreen:nil];

platform/windows/display_server_windows.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -1813,6 +1813,13 @@ void DisplayServerWindows::window_set_current_screen(int p_screen, WindowID p_wi
18131813
Size2 size = screen_get_size(p_screen);
18141814

18151815
MoveWindow(wd.hWnd, pos.x, pos.y, size.width, size.height, TRUE);
1816+
} else if (wd.maximized) {
1817+
Point2 pos = screen_get_position(p_screen) + _get_screens_origin();
1818+
Size2 size = screen_get_size(p_screen);
1819+
1820+
ShowWindow(wd.hWnd, SW_RESTORE);
1821+
MoveWindow(wd.hWnd, pos.x, pos.y, size.width, size.height, TRUE);
1822+
ShowWindow(wd.hWnd, SW_MAXIMIZE);
18161823
} else {
18171824
Rect2i srect = screen_get_usable_rect(p_screen);
18181825
Point2i wpos = window_get_position(p_window) - screen_get_position(window_get_current_screen(p_window));

0 commit comments

Comments
 (0)