Index: chrome/browser/ui/cocoa/tabs/tab_controller.mm |
diff --git a/chrome/browser/ui/cocoa/tabs/tab_controller.mm b/chrome/browser/ui/cocoa/tabs/tab_controller.mm |
index 7a00bb503b844f33f839ba1eee542b2f515fb5bd..87a2391d0382a2c1feaa876b72f3e042c59106e3 100644 |
--- a/chrome/browser/ui/cocoa/tabs/tab_controller.mm |
+++ b/chrome/browser/ui/cocoa/tabs/tab_controller.mm |
@@ -98,15 +98,15 @@ class MenuDelegate : public ui::SimpleMenuModel::Delegate { |
[super dealloc]; |
} |
-// The internals of |-setSelected:| but doesn't check if we're already set |
-// to |selected|. Pass the selection change to the subviews that need it and |
-// mark ourselves as needing a redraw. |
+// The internals of |-setSelected:| and |-setActive:| but doesn't set the |
+// backing variables. This updates the drawing state and marks self as needing |
+// a re-draw. |
- (void)internalSetSelected:(BOOL)selected { |
- selected_ = selected; |
TabView* tabView = static_cast<TabView*>([self view]); |
DCHECK([tabView isKindOfClass:[TabView class]]); |
[tabView setState:selected]; |
- [tabView cancelAlert]; |
+ if ([self active]) |
+ [tabView cancelAlert]; |
[self updateVisibility]; |
[self updateTitleColor]; |
} |
@@ -135,8 +135,9 @@ class MenuDelegate : public ui::SimpleMenuModel::Delegate { |
- (NSMenu*)menu { |
contextMenuDelegate_.reset( |
new TabControllerInternal::MenuDelegate(target_, self)); |
- contextMenuModel_.reset(new TabMenuModel(contextMenuDelegate_.get(), |
- [self pinned])); |
+ contextMenuModel_.reset( |
+ [target_ contextMenuModelForController:self |
+ menuDelegate:contextMenuDelegate_.get()]); |
contextMenuController_.reset( |
[[MenuController alloc] initWithModel:contextMenuModel_.get() |
useWithPopUpButtonCell:NO]); |
@@ -160,13 +161,26 @@ class MenuDelegate : public ui::SimpleMenuModel::Delegate { |
[super setTitle:title]; |
} |
+- (void)setActive:(BOOL)active { |
+ if (active != active_) { |
+ active_ = active; |
+ [self internalSetSelected:[self selected]]; |
+ } |
+} |
+ |
+- (BOOL)active { |
+ return active_; |
+} |
+ |
- (void)setSelected:(BOOL)selected { |
- if (selected_ != selected) |
- [self internalSetSelected:selected]; |
+ if (selected_ != selected) { |
+ selected_ = selected; |
+ [self internalSetSelected:[self selected]]; |
+ } |
} |
- (BOOL)selected { |
- return selected_; |
+ return selected_ || active_; |
} |
- (void)setIconView:(NSView*)iconView { |