| Index: chrome/browser/spellchecker/spellcheck_service.cc
|
| diff --git a/chrome/browser/spellchecker/spellcheck_service.cc b/chrome/browser/spellchecker/spellcheck_service.cc
|
| index a0411012c86d26c1162e74392ba5301dd821b813..a016149dad448144532ab7e78360fbc37d6d6f44 100644
|
| --- a/chrome/browser/spellchecker/spellcheck_service.cc
|
| +++ b/chrome/browser/spellchecker/spellcheck_service.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "chrome/browser/spellchecker/spellcheck_service.h"
|
|
|
| +#include "base/command_line.h"
|
| #include "base/prefs/pref_member.h"
|
| #include "base/prefs/pref_service.h"
|
| #include "base/strings/string_split.h"
|
| @@ -13,6 +14,7 @@
|
| #include "chrome/browser/spellchecker/spellcheck_hunspell_dictionary.h"
|
| #include "chrome/browser/spellchecker/spellcheck_platform_mac.h"
|
| #include "chrome/browser/spellchecker/spelling_service_client.h"
|
| +#include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "chrome/common/spellcheck_messages.h"
|
| #include "components/user_prefs/user_prefs.h"
|
| @@ -84,20 +86,32 @@ SpellcheckService::~SpellcheckService() {
|
| }
|
|
|
| // static
|
| -int SpellcheckService::GetSpellCheckLanguages(
|
| +std::set<int> SpellcheckService::GetSpellCheckLanguages(
|
| content::BrowserContext* context,
|
| std::vector<std::string>* languages) {
|
| PrefService* prefs = user_prefs::UserPrefs::Get(context);
|
| - StringPrefMember accept_languages_pref;
|
| - StringPrefMember dictionary_language_pref;
|
| - accept_languages_pref.Init(prefs::kAcceptLanguages, prefs);
|
| - dictionary_language_pref.Init(prefs::kSpellCheckDictionary, prefs);
|
| - std::string dictionary_language = dictionary_language_pref.GetValue();
|
|
|
| - // Now scan through the list of accept languages, and find possible mappings
|
| - // from this list to the existing list of spell check languages.
|
| + std::vector<std::string> dictionary_languages;
|
| +
|
| + const CommandLine* command_line = CommandLine::ForCurrentProcess();
|
| + if (command_line->HasSwitch(switches::kEnableMultilingualSpellChecker)) {
|
| + StringPrefMember dictionary_languages_pref;
|
| + dictionary_languages_pref.Init(prefs::kSpellCheckDictionaries, prefs);
|
| +
|
| + base::SplitString(
|
| + dictionary_languages_pref.GetValue(), ',', &dictionary_languages);
|
| + } else {
|
| + StringPrefMember dictionary_language_pref;
|
| + dictionary_language_pref.Init(prefs::kSpellCheckDictionary, prefs);
|
| +
|
| + dictionary_languages.push_back(dictionary_language_pref.GetValue());
|
| + }
|
| +
|
| std::vector<std::string> accept_languages;
|
|
|
| + StringPrefMember accept_languages_pref;
|
| + accept_languages_pref.Init(prefs::kAcceptLanguages, prefs);
|
| +
|
| #if defined(OS_MACOSX)
|
| if (spellcheck_mac::SpellCheckerAvailable())
|
| spellcheck_mac::GetAvailableLanguages(&accept_languages);
|
| @@ -107,24 +121,20 @@ int SpellcheckService::GetSpellCheckLanguages(
|
| base::SplitString(accept_languages_pref.GetValue(), ',', &accept_languages);
|
| #endif // !OS_MACOSX
|
|
|
| - GetSpellCheckLanguagesFromAcceptLanguages(
|
| - accept_languages, dictionary_language, languages);
|
| + // Put the currently selected languages as first ones on the list
|
| + *languages = dictionary_languages;
|
| + GetSpellCheckLanguagesFromAcceptLanguages(accept_languages, languages);
|
|
|
| - for (size_t i = 0; i < languages->size(); ++i) {
|
| - if ((*languages)[i] == dictionary_language)
|
| - return i;
|
| - }
|
| - return -1;
|
| + std::set<int> selected_languages;
|
| + for (size_t i = 0; i < dictionary_languages.size(); ++i)
|
| + selected_languages.insert(i);
|
| + return selected_languages;
|
| }
|
|
|
| // static
|
| void SpellcheckService::GetSpellCheckLanguagesFromAcceptLanguages(
|
| const std::vector<std::string>& accept_languages,
|
| - const std::string& dictionary_language,
|
| std::vector<std::string>* languages) {
|
| - // The current dictionary language should be there.
|
| - languages->push_back(dictionary_language);
|
| -
|
| for (std::vector<std::string>::const_iterator i = accept_languages.begin();
|
| i != accept_languages.end(); ++i) {
|
| std::string language =
|
|
|