OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.h" | 5 #import "chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.h" |
6 | 6 |
7 #include "base/mac/scoped_nsautorelease_pool.h" | 7 #include "base/mac/scoped_nsautorelease_pool.h" |
8 #include "base/strings/sys_string_conversions.h" | 8 #include "base/strings/sys_string_conversions.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "chrome/app/chrome_command_ids.h" | 10 #include "chrome/app/chrome_command_ids.h" |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
291 [appMenu addItem:[NSMenuItem separatorItem]]; | 291 [appMenu addItem:[NSMenuItem separatorItem]]; |
292 [appMenu addItem:[hideDoppelganger_ menuItem]]; | 292 [appMenu addItem:[hideDoppelganger_ menuItem]]; |
293 [appMenu addItem:[NSMenuItem separatorItem]]; | 293 [appMenu addItem:[NSMenuItem separatorItem]]; |
294 [appMenu addItem:[quitDoppelganger_ menuItem]]; | 294 [appMenu addItem:[quitDoppelganger_ menuItem]]; |
295 | 295 |
296 // File menu. | 296 // File menu. |
297 fileMenuItem_.reset([NewTopLevelItemFrom(IDC_FILE_MENU) retain]); | 297 fileMenuItem_.reset([NewTopLevelItemFrom(IDC_FILE_MENU) retain]); |
298 [[fileMenuItem_ submenu] addItem:[newDoppelganger_ menuItem]]; | 298 [[fileMenuItem_ submenu] addItem:[newDoppelganger_ menuItem]]; |
299 [[fileMenuItem_ submenu] addItem:[openDoppelganger_ menuItem]]; | 299 [[fileMenuItem_ submenu] addItem:[openDoppelganger_ menuItem]]; |
300 [[fileMenuItem_ submenu] addItem:[NSMenuItem separatorItem]]; | 300 [[fileMenuItem_ submenu] addItem:[NSMenuItem separatorItem]]; |
301 AddDuplicateItem(fileMenuItem_, IDC_FILE_MENU, IDC_CLOSE_WINDOW); | 301 |
302 // Set the expected key equivalent explicitly here because | 302 // Since the "Close Window" menu item will have the same shortcut as "Close |
303 // -[AppControllerMac adjustCloseWindowMenuItemKeyEquivalent:] sets it to | 303 // Tab" on the Chrome menu, we need to swap out these modifier keys |
304 // "W" (Cmd+Shift+w) when a tabbed window has focus; it will change it back | 304 // depending on the current menu we're displaying. |
305 // to Cmd+w when a non-tabbed window has focus. | 305 closeWindowDuplicateMenuItem_.reset( |
306 NSMenuItem* closeWindowMenuItem = | 306 [GetItemByTag(IDC_FILE_MENU, IDC_CLOSE_WINDOW) copy]); |
307 [[fileMenuItem_ submenu] itemWithTag:IDC_CLOSE_WINDOW]; | 307 closeTabSourceMenuItem_.reset( |
308 [closeWindowMenuItem setKeyEquivalent:@"w"]; | 308 [GetItemByTag(IDC_FILE_MENU, IDC_CLOSE_TAB) retain]); |
309 [closeWindowMenuItem setKeyEquivalentModifierMask:NSCommandKeyMask]; | 309 [[fileMenuItem_ submenu] addItem:closeWindowDuplicateMenuItem_]; |
310 | 310 |
311 // Edit menu. We copy the menu because the last two items, "Start Dictation" | 311 // Edit menu. We copy the menu because the last two items, "Start Dictation" |
312 // and "Special Characters" are added by OSX, so we can't copy them | 312 // and "Special Characters" are added by OSX, so we can't copy them |
313 // explicitly. | 313 // explicitly. |
314 editMenuItem_.reset([[[NSApp mainMenu] itemWithTag:IDC_EDIT_MENU] copy]); | 314 editMenuItem_.reset([[[NSApp mainMenu] itemWithTag:IDC_EDIT_MENU] copy]); |
315 | 315 |
316 // View menu. Remove "Always Show Bookmark Bar" and separator. | 316 // View menu. Remove "Always Show Bookmark Bar" and separator. |
317 viewMenuItem_.reset([[[NSApp mainMenu] itemWithTag:IDC_VIEW_MENU] copy]); | 317 viewMenuItem_.reset([[[NSApp mainMenu] itemWithTag:IDC_VIEW_MENU] copy]); |
318 RemoveMenuItemWithTag(viewMenuItem_, IDC_SHOW_BOOKMARK_BAR, YES); | 318 RemoveMenuItemWithTag(viewMenuItem_, IDC_SHOW_BOOKMARK_BAR, YES); |
319 | 319 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
404 | 404 |
405 [aboutDoppelganger_ enableForApp:app]; | 405 [aboutDoppelganger_ enableForApp:app]; |
406 [hideDoppelganger_ enableForApp:app]; | 406 [hideDoppelganger_ enableForApp:app]; |
407 [quitDoppelganger_ enableForApp:app]; | 407 [quitDoppelganger_ enableForApp:app]; |
408 [newDoppelganger_ enableForApp:app]; | 408 [newDoppelganger_ enableForApp:app]; |
409 [openDoppelganger_ enableForApp:app]; | 409 [openDoppelganger_ enableForApp:app]; |
410 | 410 |
411 [appMenuItem_ setTitle:appId]; | 411 [appMenuItem_ setTitle:appId]; |
412 [[appMenuItem_ submenu] setTitle:title]; | 412 [[appMenuItem_ submenu] setTitle:title]; |
413 | 413 |
414 // Remove the "Close Tab" key equivalent in the main menu first, then set | |
415 // the key equivalent for our copy. | |
416 [closeTabSourceMenuItem_ setKeyEquivalent:@""]; | |
tapted
2015/02/04 05:02:49
this logic is pretty close to what DoppelgangerMen
jackhou1
2015/02/04 05:46:28
The "Close Window" item kind of has two source ite
mitchellj
2015/02/04 22:33:40
Good idea, this seems cleaner. Do you think the fu
| |
417 | |
418 // Set the expected key equivalent explicitly here because it may have been | |
419 // either Cmd+Shift+w or Cmd+w. | |
420 // See -[AppControllerMac adjustCloseWindowMenuItemKeyEquivalent:]. | |
421 [closeWindowDuplicateMenuItem_ setKeyEquivalent:@"w"]; | |
422 [closeWindowDuplicateMenuItem_ | |
423 setKeyEquivalentModifierMask:NSCommandKeyMask]; | |
424 | |
414 [mainMenu addItem:appMenuItem_]; | 425 [mainMenu addItem:appMenuItem_]; |
415 [mainMenu addItem:fileMenuItem_]; | 426 [mainMenu addItem:fileMenuItem_]; |
416 | 427 |
417 SetItemWithTagVisible(editMenuItem_, | 428 SetItemWithTagVisible(editMenuItem_, |
418 IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE, | 429 IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE, |
419 app->is_hosted_app(), true); | 430 app->is_hosted_app(), true); |
420 SetItemWithTagVisible(editMenuItem_, IDC_FIND_MENU, app->is_hosted_app(), | 431 SetItemWithTagVisible(editMenuItem_, IDC_FIND_MENU, app->is_hosted_app(), |
421 false); | 432 false); |
422 [mainMenu addItem:editMenuItem_]; | 433 [mainMenu addItem:editMenuItem_]; |
423 | 434 |
424 if (app->is_hosted_app()) { | 435 if (app->is_hosted_app()) { |
425 [mainMenu addItem:viewMenuItem_]; | 436 [mainMenu addItem:viewMenuItem_]; |
426 [mainMenu addItem:historyMenuItem_]; | 437 [mainMenu addItem:historyMenuItem_]; |
427 } | 438 } |
428 [mainMenu addItem:windowMenuItem_]; | 439 [mainMenu addItem:windowMenuItem_]; |
429 } | 440 } |
430 | 441 |
431 - (void)removeMenuItems { | 442 - (void)removeMenuItems { |
432 if (!appId_) | 443 if (!appId_) |
433 return; | 444 return; |
434 | 445 |
435 appId_.reset(); | 446 appId_.reset(); |
436 | 447 |
448 // Restore the "Close Tab" key equivalent in the main menu. | |
449 [closeWindowDuplicateMenuItem_ setKeyEquivalent:@""]; | |
450 [closeTabSourceMenuItem_ setKeyEquivalent:@"w"]; | |
451 [closeTabSourceMenuItem_ setKeyEquivalentModifierMask:NSCommandKeyMask]; | |
452 | |
437 NSMenu* mainMenu = [NSApp mainMenu]; | 453 NSMenu* mainMenu = [NSApp mainMenu]; |
438 [mainMenu removeItem:appMenuItem_]; | 454 [mainMenu removeItem:appMenuItem_]; |
439 [mainMenu removeItem:fileMenuItem_]; | 455 [mainMenu removeItem:fileMenuItem_]; |
440 if ([mainMenu indexOfItem:viewMenuItem_] >= 0) | 456 if ([mainMenu indexOfItem:viewMenuItem_] >= 0) |
441 [mainMenu removeItem:viewMenuItem_]; | 457 [mainMenu removeItem:viewMenuItem_]; |
442 if ([mainMenu indexOfItem:historyMenuItem_] >= 0) | 458 if ([mainMenu indexOfItem:historyMenuItem_] >= 0) |
443 [mainMenu removeItem:historyMenuItem_]; | 459 [mainMenu removeItem:historyMenuItem_]; |
444 [mainMenu removeItem:editMenuItem_]; | 460 [mainMenu removeItem:editMenuItem_]; |
445 [mainMenu removeItem:windowMenuItem_]; | 461 [mainMenu removeItem:windowMenuItem_]; |
446 | 462 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
489 | 505 |
490 - (void)focusCurrentPlatformApp { | 506 - (void)focusCurrentPlatformApp { |
491 extensions::AppWindow* appWindow = | 507 extensions::AppWindow* appWindow = |
492 AppWindowRegistryUtil::GetAppWindowForNativeWindowAnyProfile( | 508 AppWindowRegistryUtil::GetAppWindowForNativeWindowAnyProfile( |
493 [NSApp keyWindow]); | 509 [NSApp keyWindow]); |
494 if (appWindow) | 510 if (appWindow) |
495 apps::ExtensionAppShimHandler::FocusAppForWindow(appWindow); | 511 apps::ExtensionAppShimHandler::FocusAppForWindow(appWindow); |
496 } | 512 } |
497 | 513 |
498 @end | 514 @end |
OLD | NEW |