win: Force menuWillShow to be called when setting window menu.
authorCheng Zhao <zcbenz@gmail.com>
Mon, 26 May 2014 01:38:04 +0000 (09:38 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Mon, 26 May 2014 01:38:04 +0000 (09:38 +0800)
atom/browser/api/atom_api_menu.cc
atom/browser/api/lib/menu.coffee

index 1971b3a..2eb1a81 100644 (file)
@@ -230,7 +230,7 @@ void Menu::BuildPrototype(v8::Isolate* isolate,
       .SetMethod("isEnabledAt", &Menu::IsEnabledAt)
       .SetMethod("isVisibleAt", &Menu::IsVisibleAt)
 #if defined(OS_WIN) || defined(TOOLKIT_GTK)
-      .SetMethod("attachToWindow", &Menu::AttachToWindow)
+      .SetMethod("_attachToWindow", &Menu::AttachToWindow)
 #endif
       .SetMethod("_popup", &Menu::Popup);
 }
index a2846db..a119d9f 100644 (file)
@@ -91,18 +91,22 @@ Menu::insert = (pos, item) ->
   @items.splice pos, 0, item
   @commandsMap[item.commandId] = item
 
+Menu::attachToWindow = (window) ->
+  @_callMenuWillShow() if process.platform is 'win32'
+  @_attachToWindow window
+
+# Force menuWillShow to be called
+Menu::_callMenuWillShow = ->
+  @delegate?.menuWillShow()
+  item.submenu._callMenuWillShow() for item in @items when item.submenu?
+
 applicationMenu = null
 Menu.setApplicationMenu = (menu) ->
   throw new TypeError('Invalid menu') unless menu?.constructor is Menu
   applicationMenu = menu  # Keep a reference.
 
   if process.platform is 'darwin'
-    # Force menuWillShow to be called
-    menuWillShow = (menu) ->
-      menu.delegate?.menuWillShow()
-      menuWillShow item.submenu for item in menu.items when item.submenu?
-    menuWillShow menu
-
+    menu._callMenuWillShow()
     bindings.setApplicationMenu menu
   else
     windows = BrowserWindow.getAllWindows()