Index: chrome/browser/tab_contents/render_view_context_menu.cc |
=================================================================== |
--- chrome/browser/tab_contents/render_view_context_menu.cc (revision 107513) |
+++ chrome/browser/tab_contents/render_view_context_menu.cc (working copy) |
@@ -39,6 +39,7 @@ |
#include "chrome/browser/spellchecker/spellcheck_host.h" |
#include "chrome/browser/spellchecker/spellcheck_host_metrics.h" |
#include "chrome/browser/spellchecker/spellchecker_platform_engine.h" |
+#include "chrome/browser/tab_contents/spellchecker_submenu_observer.h" |
#include "chrome/browser/tab_contents/spelling_menu_observer.h" |
#include "chrome/browser/translate/translate_manager.h" |
#include "chrome/browser/translate/translate_prefs.h" |
@@ -227,7 +228,6 @@ |
profile_(Profile::FromBrowserContext(tab_contents->browser_context())), |
ALLOW_THIS_IN_INITIALIZER_LIST(menu_model_(this)), |
external_(false), |
- ALLOW_THIS_IN_INITIALIZER_LIST(spellcheck_submenu_model_(this)), |
ALLOW_THIS_IN_INITIALIZER_LIST(speech_input_submenu_model_(this)), |
ALLOW_THIS_IN_INITIALIZER_LIST(bidi_submenu_model_(this)), |
ALLOW_THIS_IN_INITIALIZER_LIST(protocol_handler_submenu_model_(this)), |
@@ -574,20 +574,13 @@ |
} |
if (params_.is_editable) { |
- // Add a menu item that shows suggestions from the Spelling service. |
- const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
- if (command_line.HasSwitch(switches::kExperimentalSpellcheckerFeatures)) { |
- PrefService* pref = profile_->GetPrefs(); |
- bool use_spelling_service = |
- pref && pref->GetBoolean(prefs::kSpellCheckUseSpellingService); |
- if (use_spelling_service) { |
- if (!spelling_menu_observer_.get()) |
- spelling_menu_observer_.reset(new SpellingMenuObserver(this)); |
- |
- if (spelling_menu_observer_.get()) |
- observers_.AddObserver(spelling_menu_observer_.get()); |
- } |
+ // Add a menu item that shows suggestions. |
+ if (!spelling_menu_observer_.get()) { |
+ spelling_menu_observer_.reset( |
+ new SpellingMenuObserver(this)); |
} |
+ if (spelling_menu_observer_.get()) |
+ observers_.AddObserver(spelling_menu_observer_.get()); |
} |
// Ask our observers to add their menu items. |
@@ -618,6 +611,12 @@ |
menu_model_.AddItem(command_id, title); |
} |
+void RenderViewContextMenu::AddSubMenu(int command_id, |
+ const string16& label, |
+ ui::MenuModel* model) { |
+ menu_model_.AddSubMenu(command_id, label, model); |
+} |
+ |
void RenderViewContextMenu::UpdateMenuItem(int command_id, |
bool enabled, |
bool hidden, |
@@ -626,7 +625,6 @@ |
NOTIMPLEMENTED(); |
} |
- |
RenderViewHost* RenderViewContextMenu::GetRenderViewHost() const { |
return source_tab_contents_->render_view_host(); |
} |
@@ -908,50 +906,14 @@ |
} |
void RenderViewContextMenu::AppendSpellcheckOptionsSubMenu() { |
- // Add Spell Check languages to sub menu. |
- std::vector<std::string> spellcheck_languages; |
- SpellCheckHost::GetSpellCheckLanguages(profile_, |
- &spellcheck_languages); |
- DCHECK(spellcheck_languages.size() < |
- IDC_SPELLCHECK_LANGUAGES_LAST - IDC_SPELLCHECK_LANGUAGES_FIRST); |
- const std::string app_locale = g_browser_process->GetApplicationLocale(); |
- for (size_t i = 0; i < spellcheck_languages.size(); ++i) { |
- string16 display_name(l10n_util::GetDisplayNameForLocale( |
- spellcheck_languages[i], app_locale, true)); |
- spellcheck_submenu_model_.AddRadioItem( |
- IDC_SPELLCHECK_LANGUAGES_FIRST + i, |
- display_name, |
- kSpellcheckRadioGroup); |
+ if (!spellchecker_submenu_observer_.get()) { |
+ spellchecker_submenu_observer_.reset(new SpellCheckerSubMenuObserver( |
+ this, this, kSpellcheckRadioGroup)); |
} |
- |
- // Add item in the sub menu to pop up the fonts and languages options menu. |
- spellcheck_submenu_model_.AddSeparator(); |
- spellcheck_submenu_model_.AddItemWithStringId( |
- IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS, |
- IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS); |
- |
- // Add 'Check the spelling of this field' item in the sub menu. |
- spellcheck_submenu_model_.AddCheckItem( |
- IDC_CHECK_SPELLING_OF_THIS_FIELD, |
- l10n_util::GetStringUTF16( |
- IDS_CONTENT_CONTEXT_CHECK_SPELLING_OF_THIS_FIELD)); |
- |
- // Add option for showing the spelling panel if the platform spellchecker |
- // supports it. |
- if (SpellCheckerPlatform::SpellCheckerAvailable() && |
- SpellCheckerPlatform::SpellCheckerProvidesPanel()) { |
- spellcheck_submenu_model_.AddCheckItem( |
- IDC_SPELLPANEL_TOGGLE, |
- l10n_util::GetStringUTF16( |
- SpellCheckerPlatform::SpellingPanelVisible() ? |
- IDS_CONTENT_CONTEXT_HIDE_SPELLING_PANEL : |
- IDS_CONTENT_CONTEXT_SHOW_SPELLING_PANEL)); |
+ if (spellchecker_submenu_observer_.get()) { |
+ spellchecker_submenu_observer_->InitMenu(params_); |
+ observers_.AddObserver(spellchecker_submenu_observer_.get()); |
} |
- |
- menu_model_.AddSubMenu( |
- IDC_SPELLCHECK_MENU, |
- l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_SPELLCHECK_MENU), |
- &spellcheck_submenu_model_); |
} |
void RenderViewContextMenu::AppendSpeechInputOptionsSubMenu() { |
@@ -1340,6 +1302,15 @@ |
} |
bool RenderViewContextMenu::IsCommandIdChecked(int id) const { |
+ // If this command is is added by one of our observers, we dispatch it to the |
+ // observer. |
+ ObserverListBase<RenderViewContextMenuObserver>::Iterator it(observers_); |
+ RenderViewContextMenuObserver* observer; |
+ while ((observer = it.GetNext()) != NULL) { |
+ if (observer->IsCommandIdSupported(id)) |
+ return observer->IsCommandIdChecked(id); |
+ } |
+ |
// See if the video is set to looping. |
if (id == IDC_CONTENT_CONTEXT_LOOP) { |
return (params_.media_flags & |
@@ -1381,27 +1352,13 @@ |
return false; |
#endif // OS_MACOSX |
- // Check box for 'Check the Spelling of this field'. |
- if (id == IDC_CHECK_SPELLING_OF_THIS_FIELD) { |
- return (params_.spellcheck_enabled && |
- profile_->GetPrefs()->GetBoolean(prefs::kEnableSpellCheck)); |
- } |
- |
// Check box for menu item 'Block offensive words'. |
if (id == IDC_CONTENT_CONTEXT_SPEECH_INPUT_FILTER_PROFANITIES) { |
return profile_->GetPrefs()->GetBoolean( |
prefs::kSpeechInputFilterProfanities); |
} |
- // Don't bother getting the display language vector if this isn't a spellcheck |
- // language. |
- if ((id < IDC_SPELLCHECK_LANGUAGES_FIRST) || |
- (id >= IDC_SPELLCHECK_LANGUAGES_LAST)) |
- return false; |
- |
- std::vector<std::string> languages; |
- return SpellCheckHost::GetSpellCheckLanguages(profile_, &languages) == |
- (id - IDC_SPELLCHECK_LANGUAGES_FIRST); |
+ return false; |
} |
void RenderViewContextMenu::ExecuteCommand(int id) { |
@@ -1418,21 +1375,6 @@ |
return observer->ExecuteCommand(id); |
} |
- // Check to see if one of the spell check language ids have been clicked. |
- if (id >= IDC_SPELLCHECK_LANGUAGES_FIRST && |
- id < IDC_SPELLCHECK_LANGUAGES_LAST) { |
- const size_t language_number = id - IDC_SPELLCHECK_LANGUAGES_FIRST; |
- std::vector<std::string> languages; |
- SpellCheckHost::GetSpellCheckLanguages(profile_, &languages); |
- if (language_number < languages.size()) { |
- StringPrefMember dictionary_language; |
- dictionary_language.Init(prefs::kSpellCheckDictionary, |
- profile_->GetPrefs(), NULL); |
- dictionary_language.SetValue(languages[language_number]); |
- } |
- return; |
- } |
- |
RenderViewHost* rvh = source_tab_contents_->render_view_host(); |
// Process custom actions range. |
@@ -1761,10 +1703,6 @@ |
spellcheck_host->GetMetrics()->RecordReplacedWordStats(1); |
break; |
} |
- case IDC_CHECK_SPELLING_OF_THIS_FIELD: { |
- rvh->Send(new SpellCheckMsg_ToggleSpellCheck(rvh->routing_id())); |
- break; |
- } |
case IDC_SPELLCHECK_ADD_TO_DICTIONARY: { |
// GetSpellCheckHost() can return null when the suggested word is |
// provided by Web SpellCheck API. |
@@ -1784,12 +1722,6 @@ |
break; |
} |
- case IDC_SPELLPANEL_TOGGLE: { |
- rvh->Send(new SpellCheckMsg_ToggleSpellPanel( |
- rvh->routing_id(), SpellCheckerPlatform::SpellingPanelVisible())); |
- break; |
- } |
- |
#if defined(OS_MACOSX) |
case IDC_WRITING_DIRECTION_DEFAULT: |
// WebKit's current behavior is for this menu item to always be disabled. |