diff options
author | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-23 22:44:36 +0000 |
---|---|---|
committer | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-23 22:44:36 +0000 |
commit | 6f8c7b9174688742b20bf3ec29f030cf0db3e5ce (patch) | |
tree | b14c3e2c819f4500ae9599cd46ed6efd1201c93f | |
parent | 1e2764628245fa5e049997dcb134c242fbd0cae3 (diff) | |
download | chromium_src-6f8c7b9174688742b20bf3ec29f030cf0db3e5ce.zip chromium_src-6f8c7b9174688742b20bf3ec29f030cf0db3e5ce.tar.gz chromium_src-6f8c7b9174688742b20bf3ec29f030cf0db3e5ce.tar.bz2 |
Supporting multiple keyboard layouts.
Before starting InputMethodDescription refactoring, let me add multiple keyboard
layout support.
BUG=170601
TEST=ran unit_tests and chromeos_unittests and also checked manually there is no regression around keyboard selection.
Review URL: https://chromiumcodereview.appspot.com/13949015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195931 0039d316-1c4b-4281-b951-d872f2087c98
15 files changed, 101 insertions, 61 deletions
diff --git a/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.cc b/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.cc index 1ad55fe..562705b 100644 --- a/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.cc +++ b/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.cc @@ -140,7 +140,7 @@ bool ComponentExtensionIMEManagerImpl::IsInitialized() { // static bool ComponentExtensionIMEManagerImpl::ReadEngineComponent( const DictionaryValue& dict, - IBusComponent::EngineDescription* out) { + ComponentExtensionEngine* out) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE)); DCHECK(out); std::string type; @@ -159,9 +159,10 @@ bool ComponentExtensionIMEManagerImpl::ReadEngineComponent( if (!dict.GetList(extension_manifest_keys::kLayouts, &layouts)) return false; - if (layouts->GetSize() > 0) { - if (!layouts->GetString(0, &out->layout)) - return false; + for (size_t i = 0; i < layouts->GetSize(); ++i) { + std::string buffer; + if (layouts->GetString(i, &buffer)) + out->layouts.push_back(buffer); } return true; } @@ -228,7 +229,7 @@ void ComponentExtensionIMEManagerImpl::ReadComponentExtensionsInfo( if (!component_list->GetDictionary(i, &dictionary)) continue; - IBusComponent::EngineDescription engine; + ComponentExtensionEngine engine; ReadEngineComponent(*dictionary, &engine); component_ime.engines.push_back(engine); } diff --git a/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.h b/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.h index f0243630..8d69aff 100644 --- a/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.h +++ b/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.h @@ -68,9 +68,9 @@ class ComponentExtensionIMEManagerImpl // Reads each engine component in |dict|. |dict| is given by GetList with // kInputComponents key from manifest. This function returns true on success, - // otherwise retrun false. This function must be called on file thread. + // otherwise retrun false. This function must be called on FILE thread. static bool ReadEngineComponent(const DictionaryValue& dict, - IBusComponent::EngineDescription* out); + ComponentExtensionEngine* out); // True if initialized. bool is_initialized_; diff --git a/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc b/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc index 4ee01b9..01db3b5 100644 --- a/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc +++ b/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc @@ -105,7 +105,7 @@ void InputMethodEngineIBus::Initialize( const input_method::InputMethodDescriptor* fallback_desc = manager->GetInputMethodUtil()->GetInputMethodDescriptorFromId( fallback_id); - layout = fallback_desc->keyboard_layout(); + layout = fallback_desc->GetPreferredKeyboardLayout(); } component_.reset(new IBusComponent()); diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc index c08fc82..1852ab2 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc @@ -318,9 +318,9 @@ void InputMethodManagerImpl::ChangeInputMethodInternal( // Change the keyboard layout to a preferred layout for the input method. if (!xkeyboard_->SetCurrentKeyboardLayoutByName( - current_input_method_.keyboard_layout())) { + current_input_method_.GetPreferredKeyboardLayout())) { LOG(ERROR) << "Failed to change keyboard layout to " - << current_input_method_.keyboard_layout(); + << current_input_method_.GetPreferredKeyboardLayout(); } // Update input method indicators (e.g. "US", "DV") in Chrome windows. @@ -390,11 +390,10 @@ void InputMethodManagerImpl::AddInputMethodExtension( return; } - const std::string layout = layouts.empty() ? "" : layouts[0]; // TODO(nona): Support options page for normal extension ime. // crbug.com/156283. extra_input_methods_[id] = - InputMethodDescriptor(id, name, layout, language, ""); + InputMethodDescriptor(id, name, layouts, language, ""); if (!Contains(filtered_extension_imes_, id) && !ComponentExtensionIMEManager::IsComponentExtensionIMEId(id)) { if (!Contains(active_input_method_ids_, id)) { diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc index 0384ebd..2da9adc 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc @@ -80,11 +80,11 @@ class InputMethodManagerImplTest : public testing::Test { ext1.description = "ext1_description"; ext1.path = base::FilePath("ext1_file_path"); - IBusComponent::EngineDescription ext1_engine1; + ComponentExtensionEngine ext1_engine1; ext1_engine1.engine_id = "ext1_engine1_engine_id"; ext1_engine1.display_name = "ext1_engine_1_display_name"; ext1_engine1.language_code = "en"; - ext1_engine1.layout = "us"; + ext1_engine1.layouts.push_back("us"); ext1.engines.push_back(ext1_engine1); ime_list_.push_back(ext1); @@ -94,11 +94,11 @@ class InputMethodManagerImplTest : public testing::Test { ext2.description = "ext2_description"; ext2.path = base::FilePath("ext2_file_path"); - IBusComponent::EngineDescription ext2_engine1; + ComponentExtensionEngine ext2_engine1; ext2_engine1.engine_id = "ext2_engine1_engine_id"; ext2_engine1.display_name = "ext2_engine_1_display_name"; ext2_engine1.language_code = "en"; - ext2_engine1.layout = "us"; + ext2_engine1.layouts.push_back("us"); ext2.engines.push_back(ext2_engine1); ime_list_.push_back(ext2); diff --git a/chrome/browser/chromeos/input_method/input_method_util.cc b/chrome/browser/chromeos/input_method/input_method_util.cc index 8923235..f9136a0 100644 --- a/chrome/browser/chromeos/input_method/input_method_util.cc +++ b/chrome/browser/chromeos/input_method/input_method_util.cc @@ -362,7 +362,7 @@ std::string InputMethodUtil::GetKeyboardLayoutName( InputMethodIdToDescriptorMap::const_iterator iter = id_to_descriptor_.find(input_method_id); return (iter == id_to_descriptor_.end()) ? - "" : iter->second.keyboard_layout(); + "" : iter->second.GetPreferredKeyboardLayout(); } std::string InputMethodUtil::GetInputMethodDisplayNameFromId( @@ -557,8 +557,8 @@ void InputMethodUtil::GetFirstLoginInputMethodIds( GetInputMethodDescriptorFromId(input_method_id); if (descriptor && descriptor->id() != current_input_method.id() && - descriptor->keyboard_layout() == - current_input_method.keyboard_layout()) { + descriptor->GetPreferredKeyboardLayout() == + current_input_method.GetPreferredKeyboardLayout()) { most_popular_id = input_method_id; break; } @@ -620,9 +620,11 @@ void InputMethodUtil::SetComponentExtensions( } InputMethodDescriptor InputMethodUtil::GetFallbackInputMethodDescriptor() { + std::vector<std::string> layouts; + layouts.push_back("us"); return InputMethodDescriptor("xkb:us::eng", "", - "us", + layouts, "en-US", ""); // options page, not available. } @@ -652,7 +654,8 @@ void InputMethodUtil::ReloadInternalMaps() { std::make_pair(input_method.id(), input_method)); if (IsKeyboardLayout(input_method.id())) { xkb_id_to_descriptor_.insert( - std::make_pair(input_method.keyboard_layout(), input_method)); + std::make_pair(input_method.GetPreferredKeyboardLayout(), + input_method)); } } diff --git a/chrome/browser/chromeos/input_method/input_method_util_unittest.cc b/chrome/browser/chromeos/input_method/input_method_util_unittest.cc index 915bc60..387eef7 100644 --- a/chrome/browser/chromeos/input_method/input_method_util_unittest.cc +++ b/chrome/browser/chromeos/input_method/input_method_util_unittest.cc @@ -52,9 +52,11 @@ class InputMethodUtilTest : public testing::Test { InputMethodDescriptor GetDesc(const std::string& id, const std::string& raw_layout, const std::string& language_code) { + std::vector<std::string> layouts; + layouts.push_back(raw_layout); return InputMethodDescriptor(id, "", - raw_layout, + layouts, language_code, ""); // options page url } @@ -344,7 +346,7 @@ TEST_F(InputMethodUtilTest, TestGetInputMethodDescriptorFromId) { util_.GetInputMethodDescriptorFromId("pinyin"); ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. EXPECT_EQ("pinyin", descriptor->id()); - EXPECT_EQ("us", descriptor->keyboard_layout()); + EXPECT_EQ("us", descriptor->GetPreferredKeyboardLayout()); // This used to be "zh" but now we have "zh-CN" in input_methods.h, // hence this should be zh-CN now. EXPECT_EQ("zh-CN", descriptor->language_code()); diff --git a/chrome/browser/chromeos/input_method/mock_input_method_manager.cc b/chrome/browser/chromeos/input_method/mock_input_method_manager.cc index 1751fd4..1f9a0e6 100644 --- a/chrome/browser/chromeos/input_method/mock_input_method_manager.cc +++ b/chrome/browser/chromeos/input_method/mock_input_method_manager.cc @@ -116,7 +116,7 @@ InputMethodDescriptor MockInputMethodManager::GetCurrentInputMethod() const { if (!current_input_method_id_.empty()) { return InputMethodDescriptor(current_input_method_id_, descriptor.name(), - descriptor.keyboard_layout(), + descriptor.keyboard_layouts(), descriptor.language_code(), ""); // options page url. } diff --git a/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler_unittest.cc b/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler_unittest.cc index ac42c82..2da5a65 100644 --- a/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler_unittest.cc +++ b/chrome/browser/ui/webui/options/chromeos/cros_language_options_handler_unittest.cc @@ -43,9 +43,11 @@ class CrosLanguageOptionsHandlerTest : public testing::Test { InputMethodDescriptor GetDesc(const std::string& id, const std::string& raw_layout, const std::string& language_code) { + std::vector<std::string> layouts; + layouts.push_back(raw_layout); return InputMethodDescriptor(id, "", // name - raw_layout, + layouts, language_code, ""); // options page url } diff --git a/chromeos/ime/component_extension_ime_manager.cc b/chromeos/ime/component_extension_ime_manager.cc index a55e9c4..4ed9fb4 100644 --- a/chromeos/ime/component_extension_ime_manager.cc +++ b/chromeos/ime/component_extension_ime_manager.cc @@ -11,6 +11,12 @@ namespace { const char* kComponentExtensionIMEPrefix = "_comp_ime_"; } // namespace +ComponentExtensionEngine::ComponentExtensionEngine() { +} + +ComponentExtensionEngine::~ComponentExtensionEngine() { +} + ComponentExtensionIME::ComponentExtensionIME() { } @@ -93,7 +99,7 @@ bool ComponentExtensionIMEManager::IsWhitelistedExtension( std::string ComponentExtensionIMEManager::GetId( const std::string& extension_id, const std::string& engine_id) { - IBusComponent::EngineDescription engine; + ComponentExtensionEngine engine; const std::string& input_method_id = GetComponentExtensionIMEId(extension_id, engine_id); if (!FindEngineEntry(input_method_id, NULL, &engine)) @@ -103,7 +109,7 @@ std::string ComponentExtensionIMEManager::GetId( std::string ComponentExtensionIMEManager::GetName( const std::string& input_method_id) { - IBusComponent::EngineDescription engine; + ComponentExtensionEngine engine; if (!FindEngineEntry(input_method_id, NULL, &engine)) return ""; return engine.display_name; @@ -111,7 +117,7 @@ std::string ComponentExtensionIMEManager::GetName( std::string ComponentExtensionIMEManager::GetDescription( const std::string& input_method_id) { - IBusComponent::EngineDescription engine; + ComponentExtensionEngine engine; if (!FindEngineEntry(input_method_id, NULL, &engine)) return ""; return engine.description; @@ -143,7 +149,7 @@ input_method::InputMethodDescriptors component_extension_imes_[i].id, component_extension_imes_[i].engines[j].engine_id), component_extension_imes_[i].engines[j].display_name, - component_extension_imes_[i].engines[j].layout, + component_extension_imes_[i].engines[j].layouts, component_extension_imes_[i].engines[j].language_code, component_extension_imes_[i].options_page_url)); } @@ -162,12 +168,12 @@ void ComponentExtensionIMEManager::RemoveObserver(Observer* observer) { bool ComponentExtensionIMEManager::FindEngineEntry( const std::string& input_method_id, ComponentExtensionIME* out_extension, - IBusComponent::EngineDescription* out_engine) { + ComponentExtensionEngine* out_engine) { if (!IsComponentExtensionIMEId(input_method_id)) return false; for (size_t i = 0; i < component_extension_imes_.size(); ++i) { const std::string extension_id = component_extension_imes_[i].id; - const std::vector<IBusComponent::EngineDescription>& engines = + const std::vector<ComponentExtensionEngine>& engines = component_extension_imes_[i].engines; for (size_t j = 0; j < engines.size(); ++j) { diff --git a/chromeos/ime/component_extension_ime_manager.h b/chromeos/ime/component_extension_ime_manager.h index b8dee570..2c1f470 100644 --- a/chromeos/ime/component_extension_ime_manager.h +++ b/chromeos/ime/component_extension_ime_manager.h @@ -9,11 +9,21 @@ #include "base/memory/scoped_ptr.h" #include "base/observer_list.h" #include "chromeos/chromeos_export.h" -#include "chromeos/dbus/ibus/ibus_component.h" #include "chromeos/ime/input_method_descriptor.h" namespace chromeos { +// Represents an engine in component extension IME. +struct CHROMEOS_EXPORT ComponentExtensionEngine { + ComponentExtensionEngine(); + ~ComponentExtensionEngine(); + std::string engine_id; // The engine id. + std::string display_name; // The display name. + std::string language_code; // The engine's language(ex. "en"). + std::string description; // The engine description. + std::vector<std::string> layouts; // The list of keyboard layout of engine. +}; + // Represents a component extension IME. // TODO(nona): Use GURL for |option_page_url| instead of string. struct CHROMEOS_EXPORT ComponentExtensionIME { @@ -24,7 +34,7 @@ struct CHROMEOS_EXPORT ComponentExtensionIME { std::string description; // description of extension. std::string options_page_url; // We can't use GURL due to deps restriction. base::FilePath path; - std::vector<IBusComponent::EngineDescription> engines; + std::vector<ComponentExtensionEngine> engines; }; // Provides an interface to list/load/unload for component extension IME. @@ -125,7 +135,7 @@ class CHROMEOS_EXPORT ComponentExtensionIMEManager { // returns false. |out_extension| and |out_engine| can be NULL. bool FindEngineEntry(const std::string& input_method_id, ComponentExtensionIME* out_extension, - IBusComponent::EngineDescription* out_engine); + ComponentExtensionEngine* out_engine); scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate_; std::vector<ComponentExtensionIME> component_extension_imes_; diff --git a/chromeos/ime/component_extension_ime_manager_unittest.cc b/chromeos/ime/component_extension_ime_manager_unittest.cc index 65065f5..5de1657 100644 --- a/chromeos/ime/component_extension_ime_manager_unittest.cc +++ b/chromeos/ime/component_extension_ime_manager_unittest.cc @@ -37,25 +37,25 @@ class ComponentExtensionIMEManagerTest : ext1.options_page_url = "chrome-extension://" + ext1.id + "/options.html"; ext1.path = base::FilePath("ext1_file_path"); - IBusComponent::EngineDescription ext1_engine1; + ComponentExtensionEngine ext1_engine1; ext1_engine1.engine_id = "ext1_engine1_engine_id"; ext1_engine1.display_name = "ext1_engine_1_display_name"; ext1_engine1.language_code = "en"; - ext1_engine1.layout = "us"; + ext1_engine1.layouts.push_back("us"); ext1.engines.push_back(ext1_engine1); - IBusComponent::EngineDescription ext1_engine2; + ComponentExtensionEngine ext1_engine2; ext1_engine2.engine_id = "ext1_engine2_engine_id"; ext1_engine2.display_name = "ext1_engine2_display_name"; ext1_engine2.language_code = "en"; - ext1_engine2.layout = "us"; + ext1_engine2.layouts.push_back("us"); ext1.engines.push_back(ext1_engine2); - IBusComponent::EngineDescription ext1_engine3; + ComponentExtensionEngine ext1_engine3; ext1_engine3.engine_id = "ext1_engine3_engine_id"; ext1_engine3.display_name = "ext1_engine3_display_name"; ext1_engine3.language_code = "ja"; - ext1_engine3.layout = "us"; + ext1_engine3.layouts.push_back("us"); ext1.engines.push_back(ext1_engine3); ime_list_.push_back(ext1); @@ -65,25 +65,25 @@ class ComponentExtensionIMEManagerTest : ext2.description = "ext2_description"; ext2.path = base::FilePath("ext2_file_path"); - IBusComponent::EngineDescription ext2_engine1; + ComponentExtensionEngine ext2_engine1; ext2_engine1.engine_id = "ext2_engine1_engine_id"; ext2_engine1.display_name = "ext2_engine_1_display_name"; ext2_engine1.language_code = "en"; - ext2_engine1.layout = "us"; + ext2_engine1.layouts.push_back("us"); ext2.engines.push_back(ext2_engine1); - IBusComponent::EngineDescription ext2_engine2; + ComponentExtensionEngine ext2_engine2; ext2_engine2.engine_id = "ext2_engine2_engine_id"; ext2_engine2.display_name = "ext2_engine2_display_name"; ext2_engine2.language_code = "hi"; - ext2_engine2.layout = "us"; + ext2_engine2.layouts.push_back("us"); ext2.engines.push_back(ext2_engine2); - IBusComponent::EngineDescription ext2_engine3; + ComponentExtensionEngine ext2_engine3; ext2_engine3.engine_id = "ext2_engine3_engine_id"; ext2_engine3.display_name = "ext2_engine3_display_name"; ext2_engine3.language_code = "ja"; - ext2_engine3.layout = "jp"; + ext2_engine3.layouts.push_back("jp"); ext2.engines.push_back(ext2_engine3); ime_list_.push_back(ext2); @@ -94,25 +94,25 @@ class ComponentExtensionIMEManagerTest : ext1.options_page_url = "chrome-extension://" + ext3.id + "/options.html"; ext3.path = base::FilePath("ext3_file_path"); - IBusComponent::EngineDescription ext3_engine1; + ComponentExtensionEngine ext3_engine1; ext3_engine1.engine_id = "ext3_engine1_engine_id"; ext3_engine1.display_name = "ext3_engine_1_display_name"; ext3_engine1.language_code = "hi"; - ext3_engine1.layout = "us"; + ext3_engine1.layouts.push_back("us"); ext3.engines.push_back(ext3_engine1); - IBusComponent::EngineDescription ext3_engine2; + ComponentExtensionEngine ext3_engine2; ext3_engine2.engine_id = "ext3_engine2_engine_id"; ext3_engine2.display_name = "ext3_engine2_display_name"; ext3_engine2.language_code = "en"; - ext3_engine2.layout = "us"; + ext3_engine2.layouts.push_back("us"); ext3.engines.push_back(ext3_engine2); - IBusComponent::EngineDescription ext3_engine3; + ComponentExtensionEngine ext3_engine3; ext3_engine3.engine_id = "ext3_engine3_engine_id"; ext3_engine3.display_name = "ext3_engine3_display_name"; ext3_engine3.language_code = "en"; - ext3_engine3.layout = "us"; + ext3_engine3.layouts.push_back("us"); ext3.engines.push_back(ext3_engine3); ime_list_.push_back(ext3); @@ -204,7 +204,7 @@ TEST_F(ComponentExtensionIMEManagerTest, IsWhitelistedExtensionTest) { TEST_F(ComponentExtensionIMEManagerTest, GetNameDescriptionTest) { for (size_t i = 0; i < ime_list_.size(); ++i) { for (size_t j = 0; j < ime_list_[i].engines.size(); ++j) { - const IBusComponent::EngineDescription& engine + const ComponentExtensionEngine& engine = ime_list_[i].engines[j]; const std::string input_method_id = diff --git a/chromeos/ime/input_method_descriptor.cc b/chromeos/ime/input_method_descriptor.cc index 3215b68..9ceab2e 100644 --- a/chromeos/ime/input_method_descriptor.cc +++ b/chromeos/ime/input_method_descriptor.cc @@ -15,16 +15,22 @@ namespace input_method { InputMethodDescriptor::InputMethodDescriptor( const std::string& id, const std::string& name, - const std::string& keyboard_layout, + const std::vector<std::string>& keyboard_layouts, const std::string& language_code, const std::string& options_page_url) : id_(id), name_(name), - keyboard_layout_(keyboard_layout), + keyboard_layouts_(keyboard_layouts), language_code_(language_code), options_page_url_(options_page_url) { } +std::string InputMethodDescriptor::GetPreferredKeyboardLayout() const { + // TODO(nona): Investigate better way to guess the preferred layout + // http://crbug.com/170601. + return keyboard_layouts_.empty() ? "us" : keyboard_layouts_[0]; +} + InputMethodDescriptor::InputMethodDescriptor() { } diff --git a/chromeos/ime/input_method_descriptor.h b/chromeos/ime/input_method_descriptor.h index 29f4f02..fd0c27d 100644 --- a/chromeos/ime/input_method_descriptor.h +++ b/chromeos/ime/input_method_descriptor.h @@ -14,37 +14,45 @@ namespace chromeos { namespace input_method { -class InputMethodWhitelist; - // A structure which represents an input method. class CHROMEOS_EXPORT InputMethodDescriptor { public: InputMethodDescriptor(); InputMethodDescriptor(const std::string& id, const std::string& name, - const std::string& keyboard_layout, + const std::vector<std::string>& keyboard_layouts, const std::string& language_code, const std::string& options_page_url); ~InputMethodDescriptor(); + // Accessors const std::string& id() const { return id_; } const std::string& name() const { return name_; } - const std::string& keyboard_layout() const { return keyboard_layout_; } const std::string& language_code() const { return language_code_; } const std::string& options_page_url() const { return options_page_url_; } + const std::vector<std::string>& keyboard_layouts() const { + return keyboard_layouts_; + } + + // Returns preferred keyboard layout. + std::string GetPreferredKeyboardLayout() const; private: // An ID that identifies an input method engine (e.g., "t:latn-post", // "pinyin", "hangul"). std::string id_; + // A name used to specify the user-visible name of this input method. It is // only used by extension IMEs, and should be blank for internal IMEs. std::string name_; + // A preferred physical keyboard layout for the input method (e.g., "us", // "us(dvorak)", "jp"). Comma separated layout names do NOT appear. - std::string keyboard_layout_; + std::vector<std::string> keyboard_layouts_; + // Language code like "ko", "ja", "en-US", and "zh-CN". std::string language_code_; + // Options page URL e.g. // "chrome-extension://ceaajjmckiakobniehbjpdcidfpohlin/options.html". // We can't use GURL here due to dependency policy. This field is valid only diff --git a/chromeos/ime/input_method_whitelist.cc b/chromeos/ime/input_method_whitelist.cc index d9a718c..31a81b2 100644 --- a/chromeos/ime/input_method_whitelist.cc +++ b/chromeos/ime/input_method_whitelist.cc @@ -31,10 +31,13 @@ InputMethodWhitelist::GetSupportedInputMethods() const { scoped_ptr<InputMethodDescriptors> input_methods(new InputMethodDescriptors); input_methods->reserve(arraysize(kInputMethods)); for (size_t i = 0; i < arraysize(kInputMethods); ++i) { + std::vector<std::string> layouts; + layouts.push_back(kInputMethods[i].xkb_layout_id); + input_methods->push_back(InputMethodDescriptor( kInputMethods[i].input_method_id, "", - kInputMethods[i].xkb_layout_id, + layouts, kInputMethods[i].language_code, "")); // options page url, not available for non-extension input // method. |