macOS: Only bring application forward on launch if needed

We override the macOS default behavior of not activating applications
unless they are launched from Finder. To play a bit nicer, we now
try to detect if we're already the frontmost application, and skip
the explicit activateIgnoringOtherApps if so.

Pick-to: 6.5
Change-Id: Iff4ddc3dc50aeb9700c88882dd7a270cfea5b737
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
(cherry picked from commit 6343caae25179b5895b4169d7b97d61293e49b0f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Tor Arne Vestbø 2023-10-26 15:39:44 +02:00 committed by Qt Cherry-pick Bot
parent 0e10c0bde2
commit eb937aa84f

View File

@ -189,11 +189,20 @@ QT_USE_NAMESPACE
inLaunch = false;
if (qEnvironmentVariableIsEmpty("QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM")) {
// Move the application window to front to avoid launching behind the terminal.
// Ignoring other apps is necessary (we must ignore the terminal), but makes
// Qt apps play slightly less nice with other apps when lanching from Finder
// (See the activateIgnoringOtherApps docs.)
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
auto frontmostApplication = NSWorkspace.sharedWorkspace.frontmostApplication;
auto currentApplication = NSRunningApplication.currentApplication;
if (frontmostApplication != currentApplication) {
// Move the application to front to avoid launching behind the terminal.
// Ignoring other apps is necessary (we must ignore the terminal), but makes
// Qt apps play slightly less nice with other apps when launching from Finder
// (see the activateIgnoringOtherApps docs). FIXME: Try to distinguish between
// being non-active here because another application stole activation in the
// time it took us to launch from Finder, and being non-active because we were
// launched from Terminal or something that doesn't activate us at all.
qCDebug(lcQpaApplication) << "Launched with" << frontmostApplication
<< "as frontmost application. Activating" << currentApplication << "instead.";
[NSApplication.sharedApplication activateIgnoringOtherApps:YES];
}
}
QCocoaMenuBar::insertWindowMenu();