| Index: chrome/browser/chromeos/input_method/input_method_util.cc
|
| diff --git a/chrome/browser/chromeos/input_method/input_method_util.cc b/chrome/browser/chromeos/input_method/input_method_util.cc
|
| index 16c0f2283aadb54e18c4ba7c9086a0ca756bcc5d..ed6cd7451b80a266d3cf7c09d05d928b2cadcb35 100644
|
| --- a/chrome/browser/chromeos/input_method/input_method_util.cc
|
| +++ b/chrome/browser/chromeos/input_method/input_method_util.cc
|
| @@ -38,11 +38,14 @@ typedef std::multimap<std::string, std::string> LanguageCodeToIdsMap;
|
| // Map from input method ID to associated input method descriptor.
|
| typedef std::map<std::string, InputMethodDescriptor>
|
| InputMethodIdToDescriptorMap;
|
| +// Map from XKB layout ID to associated input method descriptor.
|
| +typedef std::map<std::string, InputMethodDescriptor> XkbIdToDescriptorMap;
|
|
|
| struct IdMaps {
|
| scoped_ptr<LanguageCodeToIdsMap> language_code_to_ids;
|
| scoped_ptr<std::map<std::string, std::string> > id_to_language_code;
|
| scoped_ptr<InputMethodIdToDescriptorMap> id_to_descriptor;
|
| + scoped_ptr<XkbIdToDescriptorMap> xkb_id_to_descriptor;
|
|
|
| // Returns the singleton instance.
|
| static IdMaps* GetInstance() {
|
| @@ -61,6 +64,7 @@ struct IdMaps {
|
| language_code_to_ids->clear();
|
| id_to_language_code->clear();
|
| id_to_descriptor->clear();
|
| + xkb_id_to_descriptor->clear();
|
|
|
| for (size_t i = 0; i < supported_input_methods->size(); ++i) {
|
| const InputMethodDescriptor& input_method =
|
| @@ -74,6 +78,10 @@ struct IdMaps {
|
| std::make_pair(input_method.id(), language_code));
|
| id_to_descriptor->insert(
|
| 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));
|
| + }
|
| }
|
|
|
| // Go through the languages listed in kExtraLanguages.
|
| @@ -95,7 +103,8 @@ struct IdMaps {
|
| private:
|
| IdMaps() : language_code_to_ids(new LanguageCodeToIdsMap),
|
| id_to_language_code(new std::map<std::string, std::string>),
|
| - id_to_descriptor(new InputMethodIdToDescriptorMap) {
|
| + id_to_descriptor(new InputMethodIdToDescriptorMap),
|
| + xkb_id_to_descriptor(new XkbIdToDescriptorMap) {
|
| ReloadMaps();
|
| }
|
|
|
| @@ -518,6 +527,14 @@ const InputMethodDescriptor* GetInputMethodDescriptorFromId(
|
| NULL : &(iter->second);
|
| }
|
|
|
| +const InputMethodDescriptor* GetInputMethodDescriptorFromXkbId(
|
| + const std::string& xkb_id) {
|
| + InputMethodIdToDescriptorMap::const_iterator iter
|
| + = IdMaps::GetInstance()->xkb_id_to_descriptor->find(xkb_id);
|
| + return (iter == IdMaps::GetInstance()->xkb_id_to_descriptor->end()) ?
|
| + NULL : &(iter->second);
|
| +}
|
| +
|
| string16 GetLanguageDisplayNameFromCode(const std::string& language_code) {
|
| if (!g_browser_process) {
|
| return string16();
|
|
|