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 f0f47f94f444978e94891a56b8c2e7bf473ffd40..87823c92d2a38b179ff84b1df309e0f8b024a0fd 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 |
@@ -140,6 +140,14 @@ void SetItemWithTagVisible(NSMenuItem* top_level_item, |
resourceId:(int)resourceId |
action:(SEL)action |
keyEquivalent:(NSString*)keyEquivalent; |
+// Retain the source item given |menuTag| and |sourceItemTag|. Copy |
+// the menu item given |menuTag| and |targetItemTag|. |
+// This is useful when we want a doppelganger with a different source item. |
+// For example, if there are conflicting key equivalents. |
+- (id)initWithMenuTag:(NSInteger)menuTag |
+ sourceItemTag:(NSInteger)sourceItemTag |
+ targetItemTag:(NSInteger)targetItemTag |
+ keyEquivalent:(NSString*)keyEquivalent; |
// Set the title using |resourceId_| and unset the source item's key equivalent. |
- (void)enableForApp:(const extensions::Extension*)app; |
// Restore the source item's key equivalent. |
@@ -173,6 +181,19 @@ void SetItemWithTagVisible(NSMenuItem* top_level_item, |
return self; |
} |
+- (id)initWithMenuTag:(NSInteger)menuTag |
+ sourceItemTag:(NSInteger)sourceItemTag |
+ targetItemTag:(NSInteger)targetItemTag |
+ keyEquivalent:(NSString*)keyEquivalent { |
+ if ((self = [super init])) { |
+ menuItem_.reset([GetItemByTag(menuTag, targetItemTag) copy]); |
+ sourceItem_.reset([GetItemByTag(menuTag, sourceItemTag) retain]); |
tapted
2015/02/04 23:55:59
DCHECK(menuItem_);
DCHECK(sourceItem_);
ObjC like
mitchellj
2015/02/05 00:01:34
Done.
|
+ sourceKeyEquivalent_.reset([[sourceItem_ keyEquivalent] copy]); |
+ resourceId_ = 0; |
tapted
2015/02/04 23:55:59
nit: this is redundant for ObjC (it's guaranteed t
mitchellj
2015/02/05 00:01:34
Done.
|
+ } |
+ return self; |
+} |
+ |
- (void)enableForApp:(const extensions::Extension*)app { |
// It seems that two menu items that have the same key equivalent must also |
// have the same action for the keyboard shortcut to work. (This refers to the |
@@ -260,6 +281,13 @@ void SetItemWithTagVisible(NSMenuItem* top_level_item, |
resourceId:0 |
action:nil |
keyEquivalent:@"n"]); |
+ // Since the "Close Window" menu item will have the same shortcut as "Close |
+ // Tab" on the Chrome menu, we need to create a doppelganger. |
+ closeWindowDoppelganger_.reset([[DoppelgangerMenuItem alloc] |
+ initWithMenuTag:IDC_FILE_MENU |
+ sourceItemTag:IDC_CLOSE_TAB |
+ targetItemTag:IDC_CLOSE_WINDOW |
+ keyEquivalent:@"w"]); |
// For apps, the "Window" part of "New Window" is dropped to match the default |
// menu set given to Cocoa Apps. |
[[newDoppelganger_ menuItem] setTitle:l10n_util::GetNSString(IDS_NEW_MAC)]; |
@@ -298,15 +326,7 @@ void SetItemWithTagVisible(NSMenuItem* top_level_item, |
[[fileMenuItem_ submenu] addItem:[newDoppelganger_ menuItem]]; |
[[fileMenuItem_ submenu] addItem:[openDoppelganger_ menuItem]]; |
[[fileMenuItem_ submenu] addItem:[NSMenuItem separatorItem]]; |
- AddDuplicateItem(fileMenuItem_, IDC_FILE_MENU, IDC_CLOSE_WINDOW); |
- // Set the expected key equivalent explicitly here because |
- // -[AppControllerMac adjustCloseWindowMenuItemKeyEquivalent:] sets it to |
- // "W" (Cmd+Shift+w) when a tabbed window has focus; it will change it back |
- // to Cmd+w when a non-tabbed window has focus. |
- NSMenuItem* closeWindowMenuItem = |
- [[fileMenuItem_ submenu] itemWithTag:IDC_CLOSE_WINDOW]; |
- [closeWindowMenuItem setKeyEquivalent:@"w"]; |
- [closeWindowMenuItem setKeyEquivalentModifierMask:NSCommandKeyMask]; |
+ [[fileMenuItem_ submenu] addItem:[closeWindowDoppelganger_ menuItem]]; |
// Edit menu. We copy the menu because the last two items, "Start Dictation" |
// and "Special Characters" are added by OSX, so we can't copy them |
@@ -407,6 +427,7 @@ void SetItemWithTagVisible(NSMenuItem* top_level_item, |
[quitDoppelganger_ enableForApp:app]; |
[newDoppelganger_ enableForApp:app]; |
[openDoppelganger_ enableForApp:app]; |
+ [closeWindowDoppelganger_ enableForApp:app]; |
[appMenuItem_ setTitle:appId]; |
[[appMenuItem_ submenu] setTitle:title]; |
@@ -453,6 +474,7 @@ void SetItemWithTagVisible(NSMenuItem* top_level_item, |
[quitDoppelganger_ disable]; |
[newDoppelganger_ disable]; |
[openDoppelganger_ disable]; |
+ [closeWindowDoppelganger_ disable]; |
} |
- (void)quitCurrentPlatformApp { |