Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/input_method/input_method_engine_ibus.h" | 5 #include "chrome/browser/chromeos/input_method/input_method_engine_ibus.h" |
| 6 | 6 |
| 7 #define XK_MISCELLANY | 7 #define XK_MISCELLANY |
| 8 #include <X11/keysymdef.h> | 8 #include <X11/keysymdef.h> |
| 9 #include <map> | 9 #include <map> |
| 10 | 10 |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
| 13 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
| 14 #include "base/strings/string_util.h" | 14 #include "base/strings/string_util.h" |
| 15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 16 #include "chromeos/dbus/dbus_thread_manager.h" | 16 #include "chromeos/dbus/dbus_thread_manager.h" |
| 17 #include "chromeos/dbus/ibus/ibus_client.h" | |
| 18 #include "chromeos/dbus/ibus/ibus_component.h" | 17 #include "chromeos/dbus/ibus/ibus_component.h" |
| 19 #include "chromeos/dbus/ibus/ibus_engine_factory_service.h" | 18 #include "chromeos/dbus/ibus/ibus_engine_factory_service.h" |
| 20 #include "chromeos/dbus/ibus/ibus_engine_service.h" | 19 #include "chromeos/dbus/ibus/ibus_engine_service.h" |
| 21 #include "chromeos/dbus/ibus/ibus_text.h" | 20 #include "chromeos/dbus/ibus/ibus_text.h" |
| 22 #include "chromeos/ime/candidate_window.h" | 21 #include "chromeos/ime/candidate_window.h" |
| 23 #include "chromeos/ime/component_extension_ime_manager.h" | 22 #include "chromeos/ime/component_extension_ime_manager.h" |
| 24 #include "chromeos/ime/extension_ime_util.h" | 23 #include "chromeos/ime/extension_ime_util.h" |
| 25 #include "chromeos/ime/ibus_keymap.h" | 24 #include "chromeos/ime/ibus_keymap.h" |
| 26 #include "chromeos/ime/input_method_manager.h" | 25 #include "chromeos/ime/input_method_manager.h" |
| 27 #include "dbus/object_path.h" | 26 #include "dbus/object_path.h" |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 105 IBusComponent::EngineDescription engine_desc; | 104 IBusComponent::EngineDescription engine_desc; |
| 106 engine_desc.engine_id = ibus_id_; | 105 engine_desc.engine_id = ibus_id_; |
| 107 engine_desc.display_name = description; | 106 engine_desc.display_name = description; |
| 108 engine_desc.description = description; | 107 engine_desc.description = description; |
| 109 engine_desc.language_code = (languages.empty()) ? "" : languages[0]; | 108 engine_desc.language_code = (languages.empty()) ? "" : languages[0]; |
| 110 engine_desc.author = ibus_id_; | 109 engine_desc.author = ibus_id_; |
| 111 | 110 |
| 112 component_->mutable_engine_description()->push_back(engine_desc); | 111 component_->mutable_engine_description()->push_back(engine_desc); |
| 113 manager->AddInputMethodExtension(ibus_id_, engine_name, layouts, languages, | 112 manager->AddInputMethodExtension(ibus_id_, engine_name, layouts, languages, |
| 114 options_page, this); | 113 options_page, this); |
| 115 // If connection is avaiable, register component. If there are no connection | 114 RegisterComponent(); |
|
Seigo Nonaka
2013/11/12 03:21:45
Register component is still necessary?
Hiro Komatsu
2013/11/12 04:34:24
RegisterComponent eventually calls CreateEngineHan
| |
| 116 // to ibus-daemon, OnConnected callback will register component instead. | |
| 117 if (IsConnected()) | |
| 118 RegisterComponent(); | |
| 119 } | 115 } |
| 120 | 116 |
| 121 void InputMethodEngineIBus::StartIme() { | 117 void InputMethodEngineIBus::StartIme() { |
| 122 input_method::InputMethodManager* manager = | 118 input_method::InputMethodManager* manager = |
| 123 input_method::InputMethodManager::Get(); | 119 input_method::InputMethodManager::Get(); |
| 124 if (manager && ibus_id_ == manager->GetCurrentInputMethod().id()) | 120 if (manager && ibus_id_ == manager->GetCurrentInputMethod().id()) |
| 125 Enable(); | 121 Enable(); |
| 126 } | 122 } |
| 127 | 123 |
| 128 bool InputMethodEngineIBus::SetComposition( | 124 bool InputMethodEngineIBus::SetComposition( |
| (...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 591 // TODO(nona): Support item.children. | 587 // TODO(nona): Support item.children. |
| 592 } | 588 } |
| 593 | 589 |
| 594 void InputMethodEngineIBus::OnConnected() { | 590 void InputMethodEngineIBus::OnConnected() { |
| 595 RegisterComponent(); | 591 RegisterComponent(); |
| 596 } | 592 } |
| 597 | 593 |
| 598 void InputMethodEngineIBus::OnDisconnected() { | 594 void InputMethodEngineIBus::OnDisconnected() { |
| 599 } | 595 } |
| 600 | 596 |
| 601 bool InputMethodEngineIBus::IsConnected() { | |
| 602 return DBusThreadManager::Get()->GetIBusClient() != NULL; | |
| 603 } | |
| 604 | |
| 605 void InputMethodEngineIBus::RegisterComponent() { | 597 void InputMethodEngineIBus::RegisterComponent() { |
| 606 IBusClient* client = DBusThreadManager::Get()->GetIBusClient(); | |
| 607 client->RegisterComponent( | |
| 608 *component_.get(), | |
| 609 base::Bind(&InputMethodEngineIBus::OnComponentRegistered, | |
| 610 weak_ptr_factory_.GetWeakPtr()), | |
| 611 base::Bind(&InputMethodEngineIBus::OnComponentRegistrationFailed, | |
| 612 weak_ptr_factory_.GetWeakPtr())); | |
| 613 } | |
| 614 | |
| 615 void InputMethodEngineIBus::OnComponentRegistered() { | |
| 616 ibus_engine_factory_service_->SetCreateEngineHandler( | 598 ibus_engine_factory_service_->SetCreateEngineHandler( |
| 617 ibus_id_, | 599 ibus_id_, |
| 618 base::Bind(&InputMethodEngineIBus::CreateEngineHandler, | 600 base::Bind(&InputMethodEngineIBus::CreateEngineHandler, |
| 619 weak_ptr_factory_.GetWeakPtr())); | 601 weak_ptr_factory_.GetWeakPtr())); |
| 620 } | 602 } |
| 621 | 603 |
| 622 void InputMethodEngineIBus::OnComponentRegistrationFailed() { | |
| 623 DVLOG(1) << "Failed to register input method components."; | |
| 624 // TODO(nona): Implement error handling. | |
| 625 } | |
| 626 | |
| 627 void InputMethodEngineIBus::CreateEngineHandler( | 604 void InputMethodEngineIBus::CreateEngineHandler( |
| 628 const IBusEngineFactoryService::CreateEngineResponseSender& sender) { | 605 const IBusEngineFactoryService::CreateEngineResponseSender& sender) { |
| 629 GetCurrentService()->UnsetEngine(this); | 606 GetCurrentService()->UnsetEngine(this); |
| 630 ibus_engine_service_.reset(); | 607 ibus_engine_service_.reset(); |
| 631 object_path_ = ibus_engine_factory_service_->GenerateUniqueObjectPath(); | 608 object_path_ = ibus_engine_factory_service_->GenerateUniqueObjectPath(); |
| 632 | 609 |
| 633 GetCurrentService()->SetEngine(this); | 610 GetCurrentService()->SetEngine(this); |
| 634 sender.Run(object_path_); | 611 sender.Run(object_path_); |
| 635 } | 612 } |
| 636 | 613 |
| 637 } // namespace chromeos | 614 } // namespace chromeos |
| OLD | NEW |