| Index: chrome/browser/renderer_context_menu/spellchecker_submenu_observer_hunspell.cc
|
| diff --git a/chrome/browser/renderer_context_menu/spellchecker_submenu_observer_hunspell.cc b/chrome/browser/renderer_context_menu/spellchecker_submenu_observer_hunspell.cc
|
| index ca943f5ae914b92be494ac417e92adb9d78627c0..102153fa9a66d453f6788aebd1939b15475bcf7c 100644
|
| --- a/chrome/browser/renderer_context_menu/spellchecker_submenu_observer_hunspell.cc
|
| +++ b/chrome/browser/renderer_context_menu/spellchecker_submenu_observer_hunspell.cc
|
| @@ -4,16 +4,21 @@
|
|
|
| #include "chrome/browser/renderer_context_menu/spellchecker_submenu_observer.h"
|
|
|
| +#include <algorithm>
|
| +
|
| #include "base/command_line.h"
|
| #include "base/logging.h"
|
| #include "base/prefs/pref_member.h"
|
| #include "base/prefs/pref_service.h"
|
| +#include "base/strings/string_split.h"
|
| +#include "base/strings/string_util.h"
|
| #include "chrome/app/chrome_command_ids.h"
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/renderer_context_menu/render_view_context_menu.h"
|
| #include "chrome/browser/spellchecker/spellcheck_service.h"
|
| #include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/pref_names.h"
|
| +#include "chrome/common/spellcheck_common.h"
|
| #include "chrome/common/spellcheck_messages.h"
|
| #include "chrome/grit/generated_resources.h"
|
| #include "content/public/browser/render_view_host.h"
|
| @@ -31,7 +36,7 @@ SpellCheckerSubMenuObserver::SpellCheckerSubMenuObserver(
|
| : proxy_(proxy),
|
| submenu_model_(delegate),
|
| language_group_(group),
|
| - language_selected_(0) {
|
| + num_selected_languages_(0) {
|
| DCHECK(proxy_);
|
| }
|
|
|
| @@ -45,17 +50,25 @@ void SpellCheckerSubMenuObserver::InitMenu(
|
| // Add available spell-checker languages to the sub menu.
|
| content::BrowserContext* browser_context = proxy_->GetBrowserContext();
|
| DCHECK(browser_context);
|
| - language_selected_ =
|
| + num_selected_languages_ =
|
| SpellcheckService::GetSpellCheckLanguages(browser_context, &languages_);
|
| DCHECK(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 < languages_.size(); ++i) {
|
| - base::string16 display_name(
|
| - l10n_util::GetDisplayNameForLocale(languages_[i], app_locale, true));
|
| - submenu_model_.AddRadioItem(IDC_SPELLCHECK_LANGUAGES_FIRST + i,
|
| - display_name,
|
| - language_group_);
|
| +
|
| + if (chrome::spellcheck_common::IsMultilingualSpellcheckEnabled()) {
|
| + for (size_t i = 0; i < languages_.size(); ++i) {
|
| + submenu_model_.AddCheckItem(
|
| + IDC_SPELLCHECK_LANGUAGES_FIRST + i,
|
| + l10n_util::GetDisplayNameForLocale(languages_[i], app_locale, true));
|
| + }
|
| + } else {
|
| + for (size_t i = 0; i < languages_.size(); ++i) {
|
| + submenu_model_.AddRadioItem(
|
| + IDC_SPELLCHECK_LANGUAGES_FIRST + i,
|
| + l10n_util::GetDisplayNameForLocale(languages_[i], app_locale, true),
|
| + language_group_);
|
| + }
|
| }
|
|
|
| // Add an item that opens the 'fonts and languages options' page.
|
| @@ -73,8 +86,11 @@ void SpellCheckerSubMenuObserver::InitMenu(
|
| // Add a check item "Ask Google for spelling suggestions" item. (This class
|
| // does not handle this item because the SpellingMenuObserver class handles it
|
| // on behalf of this class.)
|
| - submenu_model_.AddCheckItem(IDC_CONTENT_CONTEXT_SPELLING_TOGGLE,
|
| - l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_SPELLING_ASK_GOOGLE));
|
| + if (!chrome::spellcheck_common::IsMultilingualSpellcheckEnabled()) {
|
| + submenu_model_.AddCheckItem(
|
| + IDC_CONTENT_CONTEXT_SPELLING_TOGGLE,
|
| + l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_SPELLING_ASK_GOOGLE));
|
| + }
|
|
|
| // Add a check item "Automatically correct spelling".
|
| const base::CommandLine* command_line =
|
| @@ -117,7 +133,8 @@ bool SpellCheckerSubMenuObserver::IsCommandIdChecked(int command_id) {
|
|
|
| if (command_id >= IDC_SPELLCHECK_LANGUAGES_FIRST &&
|
| command_id < IDC_SPELLCHECK_LANGUAGES_LAST) {
|
| - return language_selected_ == command_id - IDC_SPELLCHECK_LANGUAGES_FIRST;
|
| + return num_selected_languages_ >
|
| + static_cast<size_t>(command_id - IDC_SPELLCHECK_LANGUAGES_FIRST);
|
| }
|
|
|
| // Check box for 'Check Spelling while typing'.
|
| @@ -157,14 +174,32 @@ void SpellCheckerSubMenuObserver::ExecuteCommand(int command_id) {
|
| // Check to see if one of the spell check language ids have been clicked.
|
| Profile* profile = Profile::FromBrowserContext(proxy_->GetBrowserContext());
|
| DCHECK(profile);
|
| +
|
| if (command_id >= IDC_SPELLCHECK_LANGUAGES_FIRST &&
|
| command_id < IDC_SPELLCHECK_LANGUAGES_LAST) {
|
| - const size_t language = command_id - IDC_SPELLCHECK_LANGUAGES_FIRST;
|
| - if (profile && language < languages_.size()) {
|
| - StringPrefMember dictionary_language;
|
| - dictionary_language.Init(prefs::kSpellCheckDictionary,
|
| - profile->GetPrefs());
|
| - dictionary_language.SetValue(languages_[language]);
|
| + PrefService* prefs = profile->GetPrefs();
|
| + size_t language = command_id - IDC_SPELLCHECK_LANGUAGES_FIRST;
|
| + DCHECK_LT(language, languages_.size());
|
| +
|
| + if (chrome::spellcheck_common::IsMultilingualSpellcheckEnabled()) {
|
| + std::vector<std::string> dictionary_languages =
|
| + chrome::spellcheck_common::GetDictionaryLanguagesPref(prefs);
|
| +
|
| + auto found_language =
|
| + std::find(dictionary_languages.begin(), dictionary_languages.end(),
|
| + languages_[language]);
|
| +
|
| + if (found_language != dictionary_languages.end())
|
| + dictionary_languages.erase(found_language);
|
| + else
|
| + dictionary_languages.push_back(languages_[language]);
|
| +
|
| + prefs->SetString(
|
| + prefs::kSpellCheckDictionaries,
|
| + JoinString(dictionary_languages,
|
| + chrome::spellcheck_common::kDictionaryLanguagesSeparator));
|
| + } else {
|
| + prefs->SetString(prefs::kSpellCheckDictionary, languages_[language]);
|
| }
|
| return;
|
| }
|
|
|