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 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 47 next_context_id_(1), | 47 next_context_id_(1), |
| 48 aux_text_(new IBusText()), | 48 aux_text_(new IBusText()), |
| 49 aux_text_visible_(false), | 49 aux_text_visible_(false), |
| 50 observer_(NULL), | 50 observer_(NULL), |
| 51 preedit_text_(new IBusText()), | 51 preedit_text_(new IBusText()), |
| 52 preedit_cursor_(0), | 52 preedit_cursor_(0), |
| 53 component_(new IBusComponent()), | 53 component_(new IBusComponent()), |
| 54 candidate_window_(new input_method::CandidateWindow()), | 54 candidate_window_(new input_method::CandidateWindow()), |
| 55 window_visible_(false), | 55 window_visible_(false), |
| 56 weak_ptr_factory_(this) { | 56 weak_ptr_factory_(this) { |
| 57 ibus_engine_factory_service_.reset(IBusEngineFactoryService::Create()); | |
|
satorux1
2013/11/05 03:37:55
do this in the initializer list?
ibus_engine_f
pneubeck (no reviews)
2013/11/06 09:07:56
Done.
| |
| 57 } | 58 } |
| 58 | 59 |
| 59 InputMethodEngineIBus::~InputMethodEngineIBus() { | 60 InputMethodEngineIBus::~InputMethodEngineIBus() { |
| 60 input_method::InputMethodManager::Get()->RemoveInputMethodExtension(ibus_id_); | 61 input_method::InputMethodManager::Get()->RemoveInputMethodExtension(ibus_id_); |
| 61 | 62 |
| 62 // Do not unset engine before removing input method extension, above function | 63 // Do not unset engine before removing input method extension, above function |
| 63 // may call reset function of engine object. | 64 // may call reset function of engine object. |
| 64 // TODO(nona): Call Reset manually here and remove relevant code from | 65 // TODO(nona): Call Reset manually here and remove relevant code from |
| 65 // InputMethodManager once ibus-daemon is gone. (crbug.com/158273) | 66 // InputMethodManager once ibus-daemon is gone. (crbug.com/158273) |
| 66 if (!object_path_.value().empty()) { | 67 if (!object_path_.value().empty()) { |
| 67 GetCurrentService()->UnsetEngine(this); | 68 GetCurrentService()->UnsetEngine(this); |
| 68 DBusThreadManager::Get()->RemoveIBusEngineService(object_path_); | 69 ibus_engine_service_.reset(); |
| 69 } | 70 } |
| 70 } | 71 } |
| 71 | 72 |
| 72 void InputMethodEngineIBus::Initialize( | 73 void InputMethodEngineIBus::Initialize( |
| 73 InputMethodEngine::Observer* observer, | 74 InputMethodEngine::Observer* observer, |
| 74 const char* engine_name, | 75 const char* engine_name, |
| 75 const char* extension_id, | 76 const char* extension_id, |
| 76 const char* engine_id, | 77 const char* engine_id, |
| 77 const char* description, | 78 const char* description, |
| 78 const std::vector<std::string>& languages, | 79 const std::vector<std::string>& languages, |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 520 void InputMethodEngineIBus::SetSurroundingText(const std::string& text, | 521 void InputMethodEngineIBus::SetSurroundingText(const std::string& text, |
| 521 uint32 cursor_pos, | 522 uint32 cursor_pos, |
| 522 uint32 anchor_pos) { | 523 uint32 anchor_pos) { |
| 523 observer_->OnSurroundingTextChanged(engine_id_, | 524 observer_->OnSurroundingTextChanged(engine_id_, |
| 524 text, | 525 text, |
| 525 static_cast<int>(cursor_pos), | 526 static_cast<int>(cursor_pos), |
| 526 static_cast<int>(anchor_pos)); | 527 static_cast<int>(anchor_pos)); |
| 527 } | 528 } |
| 528 | 529 |
| 529 IBusEngineService* InputMethodEngineIBus::GetCurrentService() { | 530 IBusEngineService* InputMethodEngineIBus::GetCurrentService() { |
| 530 return DBusThreadManager::Get()->GetIBusEngineService(object_path_); | 531 if (!ibus_engine_service_) |
| 532 ibus_engine_service_.reset(IBusEngineService::Create()); | |
| 533 return ibus_engine_service_.get(); | |
| 531 } | 534 } |
| 532 | 535 |
| 533 void InputMethodEngineIBus::MenuItemToProperty( | 536 void InputMethodEngineIBus::MenuItemToProperty( |
| 534 const MenuItem& item, | 537 const MenuItem& item, |
| 535 input_method::InputMethodProperty* property) { | 538 input_method::InputMethodProperty* property) { |
| 536 property->key = item.id; | 539 property->key = item.id; |
| 537 | 540 |
| 538 if (item.modified & MENU_ITEM_MODIFIED_LABEL) { | 541 if (item.modified & MENU_ITEM_MODIFIED_LABEL) { |
| 539 property->label = item.label; | 542 property->label = item.label; |
| 540 } | 543 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 586 IBusClient* client = DBusThreadManager::Get()->GetIBusClient(); | 589 IBusClient* client = DBusThreadManager::Get()->GetIBusClient(); |
| 587 client->RegisterComponent( | 590 client->RegisterComponent( |
| 588 *component_.get(), | 591 *component_.get(), |
| 589 base::Bind(&InputMethodEngineIBus::OnComponentRegistered, | 592 base::Bind(&InputMethodEngineIBus::OnComponentRegistered, |
| 590 weak_ptr_factory_.GetWeakPtr()), | 593 weak_ptr_factory_.GetWeakPtr()), |
| 591 base::Bind(&InputMethodEngineIBus::OnComponentRegistrationFailed, | 594 base::Bind(&InputMethodEngineIBus::OnComponentRegistrationFailed, |
| 592 weak_ptr_factory_.GetWeakPtr())); | 595 weak_ptr_factory_.GetWeakPtr())); |
| 593 } | 596 } |
| 594 | 597 |
| 595 void InputMethodEngineIBus::OnComponentRegistered() { | 598 void InputMethodEngineIBus::OnComponentRegistered() { |
| 596 DBusThreadManager::Get()->GetIBusEngineFactoryService()-> | 599 ibus_engine_factory_service_->SetCreateEngineHandler( |
| 597 SetCreateEngineHandler(ibus_id_, | 600 ibus_id_, |
| 598 base::Bind( | 601 base::Bind(&InputMethodEngineIBus::CreateEngineHandler, |
| 599 &InputMethodEngineIBus::CreateEngineHandler, | 602 weak_ptr_factory_.GetWeakPtr())); |
| 600 weak_ptr_factory_.GetWeakPtr())); | |
| 601 } | 603 } |
| 602 | 604 |
| 603 void InputMethodEngineIBus::OnComponentRegistrationFailed() { | 605 void InputMethodEngineIBus::OnComponentRegistrationFailed() { |
| 604 DVLOG(1) << "Failed to register input method components."; | 606 DVLOG(1) << "Failed to register input method components."; |
| 605 // TODO(nona): Implement error handling. | 607 // TODO(nona): Implement error handling. |
| 606 } | 608 } |
| 607 | 609 |
| 608 void InputMethodEngineIBus::CreateEngineHandler( | 610 void InputMethodEngineIBus::CreateEngineHandler( |
| 609 const IBusEngineFactoryService::CreateEngineResponseSender& sender) { | 611 const IBusEngineFactoryService::CreateEngineResponseSender& sender) { |
| 610 GetCurrentService()->UnsetEngine(this); | 612 GetCurrentService()->UnsetEngine(this); |
| 611 DBusThreadManager::Get()->RemoveIBusEngineService(object_path_); | 613 ibus_engine_service_.reset(); |
| 612 | 614 object_path_ = ibus_engine_factory_service_->GenerateUniqueObjectPath(); |
| 613 object_path_ = DBusThreadManager::Get()->GetIBusEngineFactoryService()-> | |
| 614 GenerateUniqueObjectPath(); | |
| 615 | 615 |
| 616 GetCurrentService()->SetEngine(this); | 616 GetCurrentService()->SetEngine(this); |
| 617 sender.Run(object_path_); | 617 sender.Run(object_path_); |
| 618 } | 618 } |
| 619 | 619 |
| 620 } // namespace chromeos | 620 } // namespace chromeos |
| OLD | NEW |