summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/translate/translate_infobars_delegates.cc2
-rw-r--r--chrome/browser/translate/translate_manager.cc10
-rw-r--r--chrome/browser/views/infobars/translate_infobars.cc12
3 files changed, 13 insertions, 11 deletions
diff --git a/chrome/browser/translate/translate_infobars_delegates.cc b/chrome/browser/translate/translate_infobars_delegates.cc
index 2aad0b4..8107f4f 100644
--- a/chrome/browser/translate/translate_infobars_delegates.cc
+++ b/chrome/browser/translate/translate_infobars_delegates.cc
@@ -97,6 +97,8 @@ void TranslateInfoBarDelegate::GetAvailableTargetLanguages(
}
void TranslateInfoBarDelegate::Translate() {
+ if (state_ == kBeforeTranslate)
+ UpdateState(kTranslating);
tab_contents_->TranslatePage(original_lang_code(), target_lang_code());
}
diff --git a/chrome/browser/translate/translate_manager.cc b/chrome/browser/translate/translate_manager.cc
index 8c90bdf..9435786 100644
--- a/chrome/browser/translate/translate_manager.cc
+++ b/chrome/browser/translate/translate_manager.cc
@@ -75,13 +75,17 @@ void TranslateManager::Observe(NotificationType type,
}
case NotificationType::PAGE_TRANSLATED: {
// Only add translate infobar if it doesn't exist; if it already exists,
- // it would have received the same notification and acted accordingly.
+ // just update the state, the actual infobar would have received the same
+ // notification and update the visual display accordingly.
TabContents* tab = Source<TabContents>(source).ptr();
int i;
for (i = 0; i < tab->infobar_delegate_count(); ++i) {
- InfoBarDelegate* info_bar = tab->GetInfoBarDelegateAt(i);
- if (info_bar->AsTranslateInfoBarDelegate())
+ TranslateInfoBarDelegate* info_bar =
+ tab->GetInfoBarDelegateAt(i)->AsTranslateInfoBarDelegate();
+ if (info_bar) {
+ info_bar->UpdateState(TranslateInfoBarDelegate::kAfterTranslate);
break;
+ }
}
if (i == tab->infobar_delegate_count()) {
NavigationEntry* entry = tab->controller().GetActiveEntry();
diff --git a/chrome/browser/views/infobars/translate_infobars.cc b/chrome/browser/views/infobars/translate_infobars.cc
index 21482a2..1caedec 100644
--- a/chrome/browser/views/infobars/translate_infobars.cc
+++ b/chrome/browser/views/infobars/translate_infobars.cc
@@ -263,12 +263,6 @@ TranslateInfoBar::~TranslateInfoBar() {
void TranslateInfoBar::UpdateState(
TranslateInfoBarDelegate::TranslateState new_state) {
- // If this is not a call for initialization (i.e. called from Constructor),
- // only proceed with state has changed.
- if (label_1_ && GetDelegate()->state() == new_state)
- return;
- GetDelegate()->UpdateState(new_state);
-
// Create and initialize state-dependent controls if necessary.
switch (new_state) {
case TranslateInfoBarDelegate::kAfterTranslate:
@@ -599,8 +593,8 @@ void TranslateInfoBar::ExecuteCommand(int command_id) {
void TranslateInfoBar::ButtonPressed(
views::Button* sender, const views::Event& event) {
if (sender == accept_button_) {
- UpdateState(TranslateInfoBarDelegate::kTranslating);
GetDelegate()->Translate();
+ UpdateState(GetDelegate()->state());
} else if (sender == deny_button_) {
GetDelegate()->TranslationDeclined();
RemoveInfoBar();
@@ -618,7 +612,9 @@ void TranslateInfoBar::Observe(NotificationType type,
TabContents* tab = Source<TabContents>(source).ptr();
if (tab != GetDelegate()->tab_contents())
return;
- UpdateState(TranslateInfoBarDelegate::kAfterTranslate);
+ if (!target_language_menu_button_ ||
+ !target_language_menu_button_->IsVisible())
+ UpdateState(TranslateInfoBarDelegate::kAfterTranslate);
}
// TranslateInfoBar, private: --------------------------------------------------