From 6e467534997704b3167e61ff874e4d81b3ee5dc2 Mon Sep 17 00:00:00 2001 From: Daniel Pham Date: Thu, 31 Mar 2016 10:12:03 -0400 Subject: [PATCH] Don't emit 'will-quit' when 'app.exit()' is called. Fixes #4643 --- atom/browser/browser.cc | 10 ++++++++-- atom/browser/browser.h | 5 ++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/atom/browser/browser.cc b/atom/browser/browser.cc index e89f52283b3c..b60df0dd44a5 100644 --- a/atom/browser/browser.cc +++ b/atom/browser/browser.cc @@ -15,6 +15,7 @@ namespace atom { Browser::Browser() : is_quiting_(false), + is_exiting_(false), is_ready_(false), is_shutdown_(false) { WindowList::AddObserver(this); @@ -49,9 +50,12 @@ void Browser::Exit(int code) { // Message loop is not ready, quit directly. exit(code); } else { - // Prepare to quit when all windows have been closed.. + // Prepare to quit when all windows have been closed. is_quiting_ = true; + // Remember this caller so that we don't emit unrelated events. + is_exiting_ = true; + // Must destroy windows before quitting, otherwise bad things can happen. atom::WindowList* window_list = atom::WindowList::GetInstance(); if (window_list->size() == 0) { @@ -175,7 +179,9 @@ void Browser::OnWindowCloseCancelled(NativeWindow* window) { } void Browser::OnWindowAllClosed() { - if (is_quiting_) + if (is_exiting_) + Shutdown(); + else if (is_quiting_) NotifyAndShutdown(); else FOR_EACH_OBSERVER(BrowserObserver, observers_, OnWindowAllClosed()); diff --git a/atom/browser/browser.h b/atom/browser/browser.h index d976fae675cc..bb65f5f05090 100644 --- a/atom/browser/browser.h +++ b/atom/browser/browser.h @@ -183,10 +183,13 @@ class Browser : public WindowListObserver { // Observers of the browser. base::ObserverList observers_; + // Whether `app.exit()` has been called + bool is_exiting_; + // Whether "ready" event has been emitted. bool is_ready_; - // The browse is being shutdown. + // The browser is being shutdown. bool is_shutdown_; std::string version_override_;