fix: emit 'shutdown' outside -[NSApplication terminate:] (#24111)

This commit is contained in:
Shelley Vohr 2020-06-15 18:58:28 -07:00 committed by GitHub
parent 0b830ba9e5
commit 9c7d73c6d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 2 deletions

View file

@ -17,6 +17,7 @@
base::scoped_nsobject<NSUserActivity> currentActivity_;
NSCondition* handoffLock_;
BOOL updateReceived_;
BOOL userStoppedShutdown_;
base::Callback<bool()> shouldShutdown_;
}
@ -25,6 +26,9 @@
- (void)setShutdownHandler:(base::Callback<bool()>)handler;
- (void)registerURLHandler;
// Called when macOS itself is shutting down.
- (void)willPowerOff:(NSNotification*)notify;
// CrAppProtocol:
- (BOOL)isHandlingSendEvent;

View file

@ -41,9 +41,14 @@ inline void dispatch_sync_main(dispatch_block_t block) {
return (AtomApplication*)[super sharedApplication];
}
- (void)willPowerOff:(NSNotification*)notify {
userStoppedShutdown_ = shouldShutdown_ && !shouldShutdown_.Run();
}
- (void)terminate:(id)sender {
if (shouldShutdown_ && !shouldShutdown_.Run())
return; // User will call Quit later.
// User will call Quit later.
if (userStoppedShutdown_)
return;
// We simply try to close the browser, which in turn will try to close the
// windows. Termination can proceed if all windows are closed or window close

View file

@ -48,12 +48,22 @@ static base::mac::ScopedObjCClassSwizzler* g_swizzle_imk_input_session;
useDefaultAccelerator:NO]);
}
- (void)willPowerOff:(NSNotification*)notify {
[[AtomApplication sharedApplication] willPowerOff:notify];
}
- (void)applicationWillFinishLaunching:(NSNotification*)notify {
// Don't add the "Enter Full Screen" menu item automatically.
[[NSUserDefaults standardUserDefaults]
setBool:NO
forKey:@"NSFullScreenMenuItemEverywhere"];
[[[NSWorkspace sharedWorkspace] notificationCenter]
addObserver:self
selector:@selector(willPowerOff:)
name:NSWorkspaceWillPowerOffNotification
object:nil];
electron::Browser::Get()->WillFinishLaunching();
}