| Index: chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm
|
| diff --git a/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm b/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm
|
| index 6cd9a1dbcceec8a81e6bedc6d3930e0be9eba355..bcc272e0029b835baffa84ae0a3c02a9dd97575e 100644
|
| --- a/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm
|
| +++ b/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm
|
| @@ -9,12 +9,50 @@
|
| #include "apps/shell_window_registry.h"
|
| #include "base/strings/sys_string_conversions.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "chrome/app/chrome_command_ids.h"
|
| #import "chrome/browser/ui/cocoa/apps/native_app_window_cocoa.h"
|
| #include "chrome/common/extensions/extension.h"
|
| #include "grit/generated_resources.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| #include "ui/base/l10n/l10n_util_mac.h"
|
|
|
| +namespace {
|
| +
|
| +// Gets an item from the main menu given the tag of the top level item
|
| +// |menu_tag| and the tag of the item |item_tag|.
|
| +NSMenuItem* GetItemByTag(NSInteger menu_tag, NSInteger item_tag) {
|
| + return [[[[NSApp mainMenu] itemWithTag:menu_tag] submenu]
|
| + itemWithTag:item_tag];
|
| +}
|
| +
|
| +// Finds a top level menu item using |menu_tag| and creates a new NSMenuItem
|
| +// with the same title.
|
| +NSMenuItem* NewTopLevelItemFrom(NSInteger menu_tag) {
|
| + NSMenuItem* original = [[NSApp mainMenu] itemWithTag:menu_tag];
|
| + base::scoped_nsobject<NSMenuItem> item([[NSMenuItem alloc]
|
| + initWithTitle:[original title]
|
| + action:nil
|
| + keyEquivalent:@""]);
|
| + DCHECK([original hasSubmenu]);
|
| + base::scoped_nsobject<NSMenu> sub_menu([[NSMenu alloc]
|
| + initWithTitle:[[original submenu] title]]);
|
| + [item setSubmenu:sub_menu];
|
| + return item.autorelease();
|
| +}
|
| +
|
| +// Finds an item using |menu_tag| and |item_tag| and adds a duplicate of it to
|
| +// the submenu of |top_level_item|.
|
| +void AddDuplicateItem(NSMenuItem* top_level_item,
|
| + NSInteger menu_tag,
|
| + NSInteger item_tag) {
|
| + base::scoped_nsobject<NSMenuItem> item(
|
| + [GetItemByTag(menu_tag, item_tag) copy]);
|
| + DCHECK(item);
|
| + [[top_level_item submenu] addItem:item];
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| @interface AppShimMenuController ()
|
| // Construct the NSMenuItems for apps.
|
| - (void)buildAppMenuItems;
|
| @@ -48,15 +86,10 @@
|
|
|
| - (void)buildAppMenuItems {
|
| // Find the "Quit Chrome" menu item.
|
| - NSMenu* chromeMenu = [[[NSApp mainMenu] itemAtIndex:0] submenu];
|
| - for (NSMenuItem* item in [chromeMenu itemArray]) {
|
| - if ([item action] == @selector(terminate:)) {
|
| - chromeMenuQuitItem_.reset([item retain]);
|
| - break;
|
| - }
|
| - }
|
| + chromeMenuQuitItem_.reset([GetItemByTag(IDC_CHROME_MENU, IDC_EXIT) retain]);
|
| DCHECK(chromeMenuQuitItem_);
|
|
|
| + // The app's menu.
|
| appMenuItem_.reset([[NSMenuItem alloc] initWithTitle:@""
|
| action:nil
|
| keyEquivalent:@""]);
|
| @@ -70,6 +103,28 @@
|
| [chromeMenuQuitItem_ keyEquivalentModifierMask]];
|
| [appMenuQuitItem setTarget:self];
|
| [appMenuItem_ setSubmenu:appMenu];
|
| +
|
| + // File menu.
|
| + fileMenuItem_.reset([NewTopLevelItemFrom(IDC_FILE_MENU) retain]);
|
| + AddDuplicateItem(fileMenuItem_, IDC_FILE_MENU, IDC_CLOSE_WINDOW);
|
| +
|
| + // Edit menu.
|
| + editMenuItem_.reset([NewTopLevelItemFrom(IDC_EDIT_MENU) retain]);
|
| + AddDuplicateItem(editMenuItem_, IDC_EDIT_MENU, IDC_CONTENT_CONTEXT_UNDO);
|
| + AddDuplicateItem(editMenuItem_, IDC_EDIT_MENU, IDC_CONTENT_CONTEXT_REDO);
|
| + [[editMenuItem_ submenu] addItem:[NSMenuItem separatorItem]];
|
| + AddDuplicateItem(editMenuItem_, IDC_EDIT_MENU, IDC_CONTENT_CONTEXT_CUT);
|
| + AddDuplicateItem(editMenuItem_, IDC_EDIT_MENU, IDC_CONTENT_CONTEXT_COPY);
|
| + AddDuplicateItem(editMenuItem_, IDC_EDIT_MENU, IDC_CONTENT_CONTEXT_PASTE);
|
| + AddDuplicateItem(editMenuItem_, IDC_EDIT_MENU, IDC_CONTENT_CONTEXT_DELETE);
|
| + AddDuplicateItem(editMenuItem_, IDC_EDIT_MENU, IDC_CONTENT_CONTEXT_SELECTALL);
|
| +
|
| + // Window menu.
|
| + windowMenuItem_.reset([NewTopLevelItemFrom(IDC_WINDOW_MENU) retain]);
|
| + AddDuplicateItem(windowMenuItem_, IDC_WINDOW_MENU, IDC_MINIMIZE_WINDOW);
|
| + AddDuplicateItem(windowMenuItem_, IDC_WINDOW_MENU, IDC_MAXIMIZE_WINDOW);
|
| + [[windowMenuItem_ submenu] addItem:[NSMenuItem separatorItem]];
|
| + AddDuplicateItem(windowMenuItem_, IDC_WINDOW_MENU, IDC_ALL_WINDOWS_FRONT);
|
| }
|
|
|
| - (void)registerEventHandlers {
|
| @@ -144,7 +199,11 @@
|
|
|
| [appMenuItem_ setTitle:appId];
|
| [[appMenuItem_ submenu] setTitle:title];
|
| +
|
| [mainMenu addItem:appMenuItem_];
|
| + [mainMenu addItem:fileMenuItem_];
|
| + [mainMenu addItem:editMenuItem_];
|
| + [mainMenu addItem:windowMenuItem_];
|
| }
|
|
|
| - (void)removeMenuItems:(NSString*)appId {
|
| @@ -155,6 +214,9 @@
|
|
|
| NSMenu* mainMenu = [NSApp mainMenu];
|
| [mainMenu removeItem:appMenuItem_];
|
| + [mainMenu removeItem:fileMenuItem_];
|
| + [mainMenu removeItem:editMenuItem_];
|
| + [mainMenu removeItem:windowMenuItem_];
|
|
|
| // Restore the Chrome main menu bar.
|
| for (NSMenuItem* item in [mainMenu itemArray])
|
|
|