From 898e29971b37bf78246d134321d2f3b3ccc40b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Thu, 1 Jan 2026 13:05:42 +0200 Subject: [PATCH] [macOS] Fix non-focusable window order. --- platform/macos/display_server_macos.mm | 36 +++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/platform/macos/display_server_macos.mm b/platform/macos/display_server_macos.mm index 0e73cfc5753..fd076a4711f 100644 --- a/platform/macos/display_server_macos.mm +++ b/platform/macos/display_server_macos.mm @@ -1788,7 +1788,14 @@ void DisplayServerMacOS::show_window(WindowID p_id) { if ([wd.window_object isMiniaturized]) { return; } else if (wd.no_focus) { - [wd.window_object orderFront:nil]; + if (wd.transient_parent != INVALID_WINDOW_ID) { + WindowData &wd_parent = windows[wd.transient_parent]; + [wd.window_object orderWindow:NSWindowAbove relativeTo:[wd_parent.window_object windowNumber]]; + } else if (p_id != MAIN_WINDOW_ID) { + [wd.window_object orderWindow:NSWindowAbove relativeTo:[windows[MAIN_WINDOW_ID].window_object windowNumber]]; + } else { + [wd.window_object orderFront:nil]; + } } else { [wd.window_object makeKeyAndOrderFront:nil]; } @@ -1980,7 +1987,14 @@ void DisplayServerMacOS::reparent_check(WindowID p_window) { if ([[wd_parent.window_object childWindows] containsObject:wd.window_object]) { [wd_parent.window_object removeChildWindow:wd.window_object]; [wd.window_object setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; - [wd.window_object orderFront:nil]; + if (wd.transient_parent != INVALID_WINDOW_ID) { + WindowData &wd_parent = windows[wd.transient_parent]; + [wd.window_object orderWindow:NSWindowAbove relativeTo:[wd_parent.window_object windowNumber]]; + } else if (p_window != MAIN_WINDOW_ID) { + [wd.window_object orderWindow:NSWindowAbove relativeTo:[windows[MAIN_WINDOW_ID].window_object windowNumber]]; + } else { + [wd.window_object orderFront:nil]; + } } } } @@ -2577,7 +2591,14 @@ void DisplayServerMacOS::window_set_flag(WindowFlags p_flag, bool p_enabled, Win if ([wd.window_object isMiniaturized]) { return; } else if (wd.no_focus) { - [wd.window_object orderFront:nil]; + if (wd.transient_parent != INVALID_WINDOW_ID) { + WindowData &wd_parent = windows[wd.transient_parent]; + [wd.window_object orderWindow:NSWindowAbove relativeTo:[wd_parent.window_object windowNumber]]; + } else if (p_window != MAIN_WINDOW_ID) { + [wd.window_object orderWindow:NSWindowAbove relativeTo:[windows[MAIN_WINDOW_ID].window_object windowNumber]]; + } else { + [wd.window_object orderFront:nil]; + } } else { [wd.window_object makeKeyAndOrderFront:nil]; } @@ -2700,7 +2721,14 @@ void DisplayServerMacOS::window_move_to_foreground(WindowID p_window) { [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; if (wd.no_focus || wd.is_popup) { - [wd.window_object orderFront:nil]; + if (wd.transient_parent != INVALID_WINDOW_ID) { + WindowData &wd_parent = windows[wd.transient_parent]; + [wd.window_object orderWindow:NSWindowAbove relativeTo:[wd_parent.window_object windowNumber]]; + } else if (p_window != MAIN_WINDOW_ID) { + [wd.window_object orderWindow:NSWindowAbove relativeTo:[windows[MAIN_WINDOW_ID].window_object windowNumber]]; + } else { + [wd.window_object orderFront:nil]; + } } else { [wd.window_object makeKeyAndOrderFront:nil]; }