Index: chrome/browser/ui/cocoa/menu_button.mm |
diff --git a/chrome/browser/ui/cocoa/menu_button.mm b/chrome/browser/ui/cocoa/menu_button.mm |
index 8f9f6200f916274cf85392d8b5c3ca2581e99027..1989afe9e28337c0ad7904ba3aa87b2a599614af 100644 |
--- a/chrome/browser/ui/cocoa/menu_button.mm |
+++ b/chrome/browser/ui/cocoa/menu_button.mm |
@@ -74,23 +74,17 @@ |
- (void)setAttachedMenu:(NSMenu*)menu { |
attachedMenu_.reset([menu retain]); |
- [[self cell] setEnableClickHold:(menu != nil)]; |
+ [self configureCell]; |
} |
- (void)setOpenMenuOnClick:(BOOL)enabled { |
openMenuOnClick_ = enabled; |
- if (enabled) { |
- [[self cell] setClickHoldTimeout:0.0]; // Make menu trigger immediately. |
- [[self cell] setAction:@selector(clickShowMenu:)]; |
- [[self cell] setTarget:self]; |
- } else { |
- [[self cell] setClickHoldTimeout:0.25]; // Default value. |
- } |
+ [self configureCell]; |
} |
- (void)setOpenMenuOnRightClick:(BOOL)enabled { |
openMenuOnRightClick_ = enabled; |
- [[self cell] setEnableRightClick:enabled]; |
+ [self configureCell]; |
} |
- (NSRect)menuRect { |
@@ -101,14 +95,43 @@ |
@implementation MenuButton (Private) |
-// Reset various settings of the button and its associated |ClickHoldButtonCell| |
-// to the standard state which provides reasonable defaults. |
+// Synchronize the state of this class with its ClickHoldButtonCell. |
- (void)configureCell { |
ClickHoldButtonCell* cell = [self cell]; |
DCHECK([cell isKindOfClass:[ClickHoldButtonCell class]]); |
- [cell setClickHoldAction:@selector(dragShowMenu:)]; |
- [cell setClickHoldTarget:self]; |
- [cell setEnableClickHold:([self attachedMenu] != nil)]; |
+ |
+ if (![self attachedMenu]) { |
+ [cell setEnableClickHold:NO]; |
+ [cell setEnableRightClick:NO]; |
+ [cell setClickHoldAction:nil]; |
+ [cell setClickHoldTarget:nil]; |
+ [cell setAccessibilityShowMenuAction:nil]; |
+ [cell setAccessibilityShowMenuTarget:nil]; |
+ return; |
+ } |
+ |
+ if (openMenuOnClick_) { |
+ [cell setEnableClickHold:NO]; |
+ [cell setClickHoldTimeout:0.0]; // Make menu trigger immediately. |
+ [cell setAction:@selector(clickShowMenu:)]; |
+ [cell setTarget:self]; |
+ [cell setClickHoldAction:nil]; |
+ [cell setClickHoldTarget:nil]; |
+ } else { |
+ [cell setEnableClickHold:YES]; |
+ [cell setClickHoldTimeout:0.25]; // Default value. |
+ [cell setClickHoldAction:@selector(dragShowMenu:)]; |
+ [cell setClickHoldTarget:self]; |
+ } |
+ |
+ [cell setEnableRightClick:openMenuOnRightClick_]; |
+ if (!openMenuOnClick_ || openMenuOnRightClick_) { |
+ [cell setAccessibilityShowMenuAction:@selector(clickShowMenu:)]; |
+ [cell setAccessibilityShowMenuTarget:self]; |
+ } else { |
+ [cell setAccessibilityShowMenuAction:nil]; |
+ [cell setAccessibilityShowMenuTarget:nil]; |
+ } |
} |
// Actually show the menu (in the correct location). |isDragging| indicates |
@@ -167,9 +190,6 @@ |
// Called when the button is clicked and released. (Shouldn't happen with |
// timeout of 0, though there may be some strange pointing devices out there.) |
- (void)clickShowMenu:(id)sender { |
- // This should only be called if openMenuOnClick has been set (which hooks |
- // up this target-action). |
- DCHECK(openMenuOnClick_ || openMenuOnRightClick_); |
[self showMenu:NO]; |
} |