OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/app_menu/app_menu_controller.h" | 5 #import "chrome/browser/ui/cocoa/app_menu/app_menu_controller.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/mac/bundle_locations.h" | 10 #include "base/mac/bundle_locations.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 } | 61 } |
62 | 62 |
63 using base::UserMetricsAction; | 63 using base::UserMetricsAction; |
64 | 64 |
65 @interface AppMenuController (Private) | 65 @interface AppMenuController (Private) |
66 - (void)createModel; | 66 - (void)createModel; |
67 - (void)adjustPositioning; | 67 - (void)adjustPositioning; |
68 - (void)performCommandDispatch:(NSNumber*)tag; | 68 - (void)performCommandDispatch:(NSNumber*)tag; |
69 - (NSButton*)zoomDisplay; | 69 - (NSButton*)zoomDisplay; |
70 - (void)menu:(NSMenu*)menu willHighlightItem:(NSMenuItem*)item; | 70 - (void)menu:(NSMenu*)menu willHighlightItem:(NSMenuItem*)item; |
71 - (void)removeAllItems:(NSMenu*)menu; | |
72 - (NSMenu*)recentTabsSubmenu; | 71 - (NSMenu*)recentTabsSubmenu; |
73 - (RecentTabsSubMenuModel*)recentTabsMenuModel; | 72 - (RecentTabsSubMenuModel*)recentTabsMenuModel; |
74 - (int)maxWidthForMenuModel:(ui::MenuModel*)model | 73 - (int)maxWidthForMenuModel:(ui::MenuModel*)model |
75 modelIndex:(int)modelIndex; | 74 modelIndex:(int)modelIndex; |
76 @end | 75 @end |
77 | 76 |
78 namespace AppMenuControllerInternal { | 77 namespace AppMenuControllerInternal { |
79 | 78 |
80 // A C++ delegate that handles the accelerators in the app menu. | 79 // A C++ delegate that handles the accelerators in the app menu. |
81 class AcceleratorDelegate : public ui::AcceleratorProvider { | 80 class AcceleratorDelegate : public ui::AcceleratorProvider { |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 UMA_HISTOGRAM_TIMES("Toolbar.AppMenuTimeToAction", | 393 UMA_HISTOGRAM_TIMES("Toolbar.AppMenuTimeToAction", |
395 base::TimeTicks::Now() - menuOpenTime_); | 394 base::TimeTicks::Now() - menuOpenTime_); |
396 menuOpenTime_ = base::TimeTicks(); | 395 menuOpenTime_ = base::TimeTicks(); |
397 } | 396 } |
398 | 397 |
399 - (void)menuNeedsUpdate:(NSMenu*)menu { | 398 - (void)menuNeedsUpdate:(NSMenu*)menu { |
400 // We should never have a BrowserActionsController before creating the menu. | 399 // We should never have a BrowserActionsController before creating the menu. |
401 DCHECK(!browserActionsController_.get()); | 400 DCHECK(!browserActionsController_.get()); |
402 | 401 |
403 // First empty out the menu and create a new model. | 402 // First empty out the menu and create a new model. |
404 [self removeAllItems:menu]; | 403 [menu removeAllItems]; |
405 [self createModel]; | 404 [self createModel]; |
406 [menu setMinimumWidth:0]; | 405 [menu setMinimumWidth:0]; |
407 | 406 |
408 // Create a new menu, which cannot be swapped because the tracking is about to | 407 // Create a new menu, which cannot be swapped because the tracking is about to |
409 // start, so simply copy the items. | 408 // start, so simply copy the items. |
410 NSMenu* newMenu = [self menuFromModel:model_]; | 409 NSMenu* newMenu = [self menuFromModel:model_]; |
411 NSArray* itemArray = [newMenu itemArray]; | 410 NSArray* itemArray = [newMenu itemArray]; |
412 [self removeAllItems:newMenu]; | 411 [newMenu removeAllItems]; |
413 for (NSMenuItem* item in itemArray) { | 412 for (NSMenuItem* item in itemArray) { |
414 [menu addItem:item]; | 413 [menu addItem:item]; |
415 } | 414 } |
416 | 415 |
417 [self updateRecentTabsSubmenu]; | 416 [self updateRecentTabsSubmenu]; |
418 [self updateBookmarkSubMenu]; | 417 [self updateBookmarkSubMenu]; |
419 [self updateBrowserActionsSubmenu]; | 418 [self updateBrowserActionsSubmenu]; |
420 } | 419 } |
421 | 420 |
422 // Used to dispatch commands from the App menu. The custom items within the | 421 // Used to dispatch commands from the App menu. The custom items within the |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 return [buttonViewController_ zoomDisplay]; | 537 return [buttonViewController_ zoomDisplay]; |
539 } | 538 } |
540 | 539 |
541 - (void)menu:(NSMenu*)menu willHighlightItem:(NSMenuItem*)item { | 540 - (void)menu:(NSMenu*)menu willHighlightItem:(NSMenuItem*)item { |
542 if (browserActionsController_.get()) { | 541 if (browserActionsController_.get()) { |
543 [browserActionsController_ setFocusedInOverflow: | 542 [browserActionsController_ setFocusedInOverflow: |
544 (item == browserActionsMenuItem_)]; | 543 (item == browserActionsMenuItem_)]; |
545 } | 544 } |
546 } | 545 } |
547 | 546 |
548 // -[NSMenu removeAllItems] is only available on 10.6+. | |
549 - (void)removeAllItems:(NSMenu*)menu { | |
550 while ([menu numberOfItems]) { | |
551 [menu removeItemAtIndex:0]; | |
552 } | |
553 } | |
554 | |
555 - (NSMenu*)recentTabsSubmenu { | 547 - (NSMenu*)recentTabsSubmenu { |
556 NSString* title = l10n_util::GetNSStringWithFixup(IDS_RECENT_TABS_MENU); | 548 NSString* title = l10n_util::GetNSStringWithFixup(IDS_RECENT_TABS_MENU); |
557 return [[[self menu] itemWithTitle:title] submenu]; | 549 return [[[self menu] itemWithTitle:title] submenu]; |
558 } | 550 } |
559 | 551 |
560 // The recent tabs menu model is recognized by the existence of either the | 552 // The recent tabs menu model is recognized by the existence of either the |
561 // kRecentlyClosedHeaderCommandId or the kDisabledRecentlyClosedHeaderCommandId. | 553 // kRecentlyClosedHeaderCommandId or the kDisabledRecentlyClosedHeaderCommandId. |
562 - (RecentTabsSubMenuModel*)recentTabsMenuModel { | 554 - (RecentTabsSubMenuModel*)recentTabsMenuModel { |
563 int index = 0; | 555 int index = 0; |
564 // Start searching at the app menu model level, |model| will be updated only | 556 // Start searching at the app menu model level, |model| will be updated only |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
641 // (and thus, after all our ability to adjust it normally). Throw in the | 633 // (and thus, after all our ability to adjust it normally). Throw in the |
642 // towel, and simply don't let the frame move from where it's supposed to be. | 634 // towel, and simply don't let the frame move from where it's supposed to be. |
643 // TODO(devlin): Yet another Cocoa hack. It'd be good to find a workaround, | 635 // TODO(devlin): Yet another Cocoa hack. It'd be good to find a workaround, |
644 // but unlikely unless we replace the Cocoa menu implementation. | 636 // but unlikely unless we replace the Cocoa menu implementation. |
645 NSView* containerSuperview = [overflowActionsContainerView_ superview]; | 637 NSView* containerSuperview = [overflowActionsContainerView_ superview]; |
646 if (NSMinX([containerSuperview frame]) != 0) | 638 if (NSMinX([containerSuperview frame]) != 0) |
647 [containerSuperview setFrameOrigin:NSZeroPoint]; | 639 [containerSuperview setFrameOrigin:NSZeroPoint]; |
648 } | 640 } |
649 | 641 |
650 @end // @implementation AppMenuButtonViewController | 642 @end // @implementation AppMenuButtonViewController |
OLD | NEW |