summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/cocoa/translate_infobar.mm31
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;
}