Invoke close callback after itemSelected runs
authorKevin Sawicki <kevinsawicki@gmail.com>
Wed, 22 Feb 2017 19:47:58 +0000 (11:47 -0800)
committerKevin Sawicki <kevinsawicki@gmail.com>
Wed, 22 Feb 2017 19:47:58 +0000 (11:47 -0800)
atom/browser/ui/cocoa/atom_menu_controller.mm

index 2286b6b..b3e2931 100644 (file)
 #include "ui/base/accelerators/accelerator.h"
 #include "ui/base/accelerators/platform_accelerator_cocoa.h"
 #include "ui/base/l10n/l10n_util_mac.h"
+#include "content/public/browser/browser_thread.h"
 #include "ui/events/cocoa/cocoa_event_utils.h"
 #include "ui/gfx/image/image.h"
 
+using content::BrowserThread;
+
 namespace {
 
 struct Role {
@@ -271,8 +274,11 @@ Role kRolesMap[] = {
   if (isMenuOpen_) {
     isMenuOpen_ = NO;
     model_->MenuWillClose();
+
+    // Post async task so that itemSelected runs before the close callback
+    // deletes the controller from the map which deallocates it
     if (!closeCallback.is_null())
-      closeCallback.Run();
+      BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, closeCallback);
   }
 }