diff options
author | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-16 21:21:23 +0000 |
---|---|---|
committer | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-16 21:21:23 +0000 |
commit | 76ba4f19153ecb6f33fb4eef85d302bef5948ea3 (patch) | |
tree | d640646cd926245c6afcab317c7f917c604a8f94 /chrome | |
parent | 641e6eb38b69e5aac117e7ee151d80a5750dc26c (diff) | |
download | chromium_src-76ba4f19153ecb6f33fb4eef85d302bef5948ea3.zip chromium_src-76ba4f19153ecb6f33fb4eef85d302bef5948ea3.tar.gz chromium_src-76ba4f19153ecb6f33fb4eef85d302bef5948ea3.tar.bz2 |
Mac: Fix enabling & checkmarks in translate infobar options menu.
BUG=39819
TEST=Selecting "always translate" from the translate infobar options menu, a checkmark should appear next to it and the "never translate" options should be grayed out.
Review URL: http://codereview.chromium.org/1559036
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@44824 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/cocoa/translate_infobar.mm | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/chrome/browser/cocoa/translate_infobar.mm b/chrome/browser/cocoa/translate_infobar.mm index 412e535..d4df101 100644 --- a/chrome/browser/cocoa/translate_infobar.mm +++ b/chrome/browser/cocoa/translate_infobar.mm @@ -85,7 +85,7 @@ NSTextField* CreateLabel(NSRect bounds) { // Adds an item with the specified properties to |menu|. void AddMenuItem(NSMenu *menu, id target, NSString* title, int tag, - bool checked) { + bool enabled, bool checked) { NSMenuItem* item = [[[NSMenuItem alloc] initWithTitle:title action:@selector(menuItemSelected:) @@ -95,6 +95,8 @@ void AddMenuItem(NSMenu *menu, id target, NSString* title, int tag, [item setTarget:target]; if (checked) [item setState:NSOnState]; + if (!enabled) + [item setEnabled:NO]; } } // namespace @@ -470,17 +472,20 @@ class TranslateNotificationObserverBridge : // Populate options menu. NSMenu* optionsMenu = [optionsPopUp_ menu]; + [optionsMenu setAutoenablesItems:NO]; for (int i = 0; i < options_menu_model_->GetItemCount(); ++i) { NSString* title = base::SysUTF16ToNSString( options_menu_model_->GetLabelAt(i)); int cmd = options_menu_model_->GetCommandIdAt(i); bool checked = options_menu_model_->IsItemCheckedAt(i); - AddMenuItem(optionsMenu, self, title, cmd, checked); + bool enabled = options_menu_model_->IsEnabledAt(i); + AddMenuItem(optionsMenu, self, title, cmd, enabled, checked); } } - (void)populateLanguageMenus { NSMenu* originalLanguageMenu = [fromLanguagePopUp_ menu]; + [originalLanguageMenu setAutoenablesItems:NO]; int selectedMenuIndex = 0; int selectedLangIndex = [self delegate]->original_lang_index(); for (int i = 0; i < original_language_menu_model_->GetItemCount(); ++i) { @@ -491,11 +496,13 @@ class TranslateNotificationObserverBridge : (cmd - IDC_TRANSLATE_ORIGINAL_LANGUAGE_BASE) == selectedLangIndex; if (checked) selectedMenuIndex = i; - AddMenuItem(originalLanguageMenu, self, title, cmd, checked); + bool enabled = original_language_menu_model_->IsEnabledAt(i); + AddMenuItem(originalLanguageMenu, self, title, cmd, enabled, checked); } [fromLanguagePopUp_ selectItemAtIndex:selectedMenuIndex]; NSMenu* targetLanguageMenu = [toLanguagePopUp_ menu]; + [targetLanguageMenu setAutoenablesItems:NO]; selectedLangIndex = [self delegate]->target_lang_index(); for (int i = 0; i < target_language_menu_model_->GetItemCount(); ++i) { NSString* title = base::SysUTF16ToNSString( @@ -505,7 +512,8 @@ class TranslateNotificationObserverBridge : (cmd - IDC_TRANSLATE_TARGET_LANGUAGE_BASE) == selectedLangIndex; if (checked) selectedMenuIndex = i; - AddMenuItem(targetLanguageMenu, self, title, cmd, checked); + bool enabled = target_language_menu_model_->IsEnabledAt(i); + AddMenuItem(targetLanguageMenu, self, title, cmd, enabled, checked); } [toLanguagePopUp_ selectItemAtIndex:selectedMenuIndex]; } @@ -646,6 +654,9 @@ class TranslateNotificationObserverBridge : if ([item respondsToSelector:@selector(tag)]) { int cmd = [item tag]; menu_model_->ExecuteCommand(cmd); + + // The command many change the state of the options menu items. + [self rebuildOptionsMenu]; } else { NOTREACHED(); } @@ -808,6 +819,18 @@ bool TranslateInfoBarMenuModel::IsCommandIdChecked(int command_id) const { } bool TranslateInfoBarMenuModel::IsCommandIdEnabled(int command_id) const { + switch (command_id) { + case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_LANG : + case IDC_TRANSLATE_OPTIONS_NEVER_TRANSLATE_SITE : + return !translate_delegate_->ShouldAlwaysTranslate(); + + case IDC_TRANSLATE_OPTIONS_ALWAYS : + return (!translate_delegate_->IsLanguageBlacklisted() && + !translate_delegate_->IsSiteBlacklisted()); + + default: + break; + } return true; } |