OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/views/infobars/after_translate_infobar.h" | 5 #include "chrome/browser/views/infobars/after_translate_infobar.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
9 #include "chrome/browser/translate/options_menu_model.h" | 9 #include "chrome/browser/translate/options_menu_model.h" |
10 #include "chrome/browser/translate/translate_infobar_delegate.h" | 10 #include "chrome/browser/translate/translate_infobar_delegate.h" |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 void AfterTranslateInfoBar::OriginalLanguageChanged() { | 110 void AfterTranslateInfoBar::OriginalLanguageChanged() { |
111 UpdateLanguageButtonText(LanguagesMenuModel::ORIGINAL); | 111 UpdateLanguageButtonText(LanguagesMenuModel::ORIGINAL); |
112 } | 112 } |
113 | 113 |
114 void AfterTranslateInfoBar::TargetLanguageChanged() { | 114 void AfterTranslateInfoBar::TargetLanguageChanged() { |
115 UpdateLanguageButtonText(LanguagesMenuModel::TARGET); | 115 UpdateLanguageButtonText(LanguagesMenuModel::TARGET); |
116 } | 116 } |
117 | 117 |
118 void AfterTranslateInfoBar::ButtonPressed(views::Button* sender, | 118 void AfterTranslateInfoBar::ButtonPressed(views::Button* sender, |
119 const views::Event& event) { | 119 const views::Event& event) { |
120 if (sender == revert_button_) { | 120 if (delegate() && (sender == revert_button_)) { |
121 GetDelegate()->RevertTranslation(); | 121 GetDelegate()->RevertTranslation(); |
122 return; | 122 return; |
123 } | 123 } |
| 124 |
124 TranslateInfoBarBase::ButtonPressed(sender, event); | 125 TranslateInfoBarBase::ButtonPressed(sender, event); |
125 } | 126 } |
126 | 127 |
127 void AfterTranslateInfoBar::RunMenu(views::View* source, | 128 void AfterTranslateInfoBar::RunMenu(views::View* source, |
128 const gfx::Point& pt) { | 129 const gfx::Point& pt) { |
| 130 if (!delegate()) |
| 131 return; |
| 132 // TODO(pkasting): What if the InfoBarDelegate is closed while the menu is |
| 133 // open? Then the menu models may deref garbage delegate pointers. |
| 134 |
129 if (source == original_language_menu_button_) { | 135 if (source == original_language_menu_button_) { |
130 if (!original_language_menu_.get()) { | 136 if (!original_language_menu_.get()) { |
131 original_language_menu_.reset( | 137 original_language_menu_.reset( |
132 new views::Menu2(&original_language_menu_model_)); | 138 new views::Menu2(&original_language_menu_model_)); |
133 } | 139 } |
134 original_language_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT); | 140 original_language_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT); |
135 } else if (source == target_language_menu_button_) { | 141 } else if (source == target_language_menu_button_) { |
136 if (!target_language_menu_.get()) { | 142 if (!target_language_menu_.get()) { |
137 target_language_menu_.reset( | 143 target_language_menu_.reset( |
138 new views::Menu2(&target_language_menu_model_)); | 144 new views::Menu2(&target_language_menu_model_)); |
(...skipping 21 matching lines...) Expand all Loading... |
160 } | 166 } |
161 string16 language = | 167 string16 language = |
162 GetDelegate()->GetLanguageDisplayableNameAt(language_index); | 168 GetDelegate()->GetLanguageDisplayableNameAt(language_index); |
163 language_button->SetText(UTF16ToWideHack(language)); | 169 language_button->SetText(UTF16ToWideHack(language)); |
164 // The following line is necessary for the preferred size to be recomputed. | 170 // The following line is necessary for the preferred size to be recomputed. |
165 language_button->ClearMaxTextSize(); | 171 language_button->ClearMaxTextSize(); |
166 // The button may have to grow to show the new text. | 172 // The button may have to grow to show the new text. |
167 Layout(); | 173 Layout(); |
168 SchedulePaint(); | 174 SchedulePaint(); |
169 } | 175 } |
OLD | NEW |