fix: Use activateIgnoringOtherApps for non-panels (#40570)
Use activateIgnoringOtherApps for non-panels
This commit is contained in:
parent
58a21a3cd9
commit
f0f027c06d
1 changed files with 18 additions and 2 deletions
|
@ -127,6 +127,10 @@ bool IsFramelessWindow(NSView* view) {
|
||||||
return window && !window->has_frame();
|
return window && !window->has_frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsPanel(NSWindow* window) {
|
||||||
|
return [window isKindOfClass:[NSPanel class]];
|
||||||
|
}
|
||||||
|
|
||||||
IMP original_set_frame_size = nullptr;
|
IMP original_set_frame_size = nullptr;
|
||||||
IMP original_view_did_move_to_superview = nullptr;
|
IMP original_view_did_move_to_superview = nullptr;
|
||||||
|
|
||||||
|
@ -469,16 +473,28 @@ void NativeWindowMac::Focus(bool focus) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (focus) {
|
if (focus) {
|
||||||
|
// If we're a panel window, we do not want to activate the app,
|
||||||
|
// which enables Electron-apps to build Spotlight-like experiences.
|
||||||
|
//
|
||||||
// On macOS < Sonoma, "activateIgnoringOtherApps:NO" would not
|
// On macOS < Sonoma, "activateIgnoringOtherApps:NO" would not
|
||||||
// activate apps if focusing a window that is inActive. That
|
// activate apps if focusing a window that is inActive. That
|
||||||
// changed with macOS Sonoma.
|
// changed with macOS Sonoma, which also deprecated
|
||||||
|
// "activateIgnoringOtherApps". For the panel-specific usecase,
|
||||||
|
// we can simply replace "activateIgnoringOtherApps:NO" with
|
||||||
|
// "activate". For details on why we cannot replace all calls 1:1,
|
||||||
|
// please see
|
||||||
|
// https://github.com/electron/electron/pull/40307#issuecomment-1801976591.
|
||||||
//
|
//
|
||||||
// There's a slim chance we should have never called
|
// There's a slim chance we should have never called
|
||||||
// activateIgnoringOtherApps, but we tried that many years ago
|
// activateIgnoringOtherApps, but we tried that many years ago
|
||||||
// and saw weird focus bugs on other macOS versions. So, to make
|
// and saw weird focus bugs on other macOS versions. So, to make
|
||||||
// this safe, we're gating by versions.
|
// this safe, we're gating by versions.
|
||||||
if (@available(macOS 14.0, *)) {
|
if (@available(macOS 14.0, *)) {
|
||||||
[[NSApplication sharedApplication] activate];
|
if (!IsPanel(window_)) {
|
||||||
|
[[NSApplication sharedApplication] activate];
|
||||||
|
} else {
|
||||||
|
[[NSApplication sharedApplication] activateIgnoringOtherApps:NO];
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
[[NSApplication sharedApplication] activateIgnoringOtherApps:NO];
|
[[NSApplication sharedApplication] activateIgnoringOtherApps:NO];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue