From 995b9dacc924ee9b8f5241ce8e0f9e4f3b365dc8 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 16 May 2013 14:39:12 +0800 Subject: [PATCH] Fix titles of submenus in application menu. --- browser/api/atom_api_menu_mac.h | 5 +++++ browser/api/atom_api_menu_mac.mm | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/browser/api/atom_api_menu_mac.h b/browser/api/atom_api_menu_mac.h index 9d0e0580a283..0491457be887 100644 --- a/browser/api/atom_api_menu_mac.h +++ b/browser/api/atom_api_menu_mac.h @@ -26,6 +26,11 @@ class MenuMac : public Menu { private: friend class Menu; + // The MenuController doesn't set title for menus, however it's required by + // application menu to show submenus correctly, fix it by iterating all + // submenus and set their titles. + static void FixMenuTitles(NSMenu* menu); + DISALLOW_COPY_AND_ASSIGN(MenuMac); }; diff --git a/browser/api/atom_api_menu_mac.mm b/browser/api/atom_api_menu_mac.mm index e31bf5487b75..052579e0c837 100644 --- a/browser/api/atom_api_menu_mac.mm +++ b/browser/api/atom_api_menu_mac.mm @@ -61,6 +61,16 @@ void MenuMac::Popup(NativeWindow* native_window) { } } +// static +void MenuMac::FixMenuTitles(NSMenu* menu) { + int size = [menu numberOfItems]; + for (int i = 0; i < size; ++i) { + NSMenuItem* item = [menu itemAtIndex:i]; + if ([item hasSubmenu]) + [[item submenu] setTitle:[item title]]; + } +} + // static v8::Handle Menu::SetApplicationMenu(const v8::Arguments &args) { v8::HandleScope scope; @@ -75,6 +85,7 @@ v8::Handle Menu::SetApplicationMenu(const v8::Arguments &args) { scoped_nsobject menu_controller( [[MenuController alloc] initWithModel:menu->model_.get() useWithPopUpButtonCell:NO]); + MenuMac::FixMenuTitles([menu_controller menu]); [NSApp setMainMenu:[menu_controller menu]]; // Ensure the menu_controller_ is destroyed after main menu is set.