Index: chromeos/dbus/ibus/ibus_engine_service.cc |
diff --git a/chromeos/dbus/ibus/ibus_engine_service.cc b/chromeos/dbus/ibus/ibus_engine_service.cc |
index 1ae82f9288ee7ef2c960a037a8a2a809117fcd6d..dd9cb3401866116e69986a21cef312d3ed7ab769 100644 |
--- a/chromeos/dbus/ibus/ibus_engine_service.cc |
+++ b/chromeos/dbus/ibus/ibus_engine_service.cc |
@@ -4,8 +4,10 @@ |
#include "chromeos/dbus/ibus/ibus_engine_service.h" |
+#include <string> |
#include "base/bind.h" |
#include "base/callback.h" |
+#include "chromeos/dbus/ibus/ibus_constants.h" |
#include "chromeos/dbus/ibus/ibus_lookup_table.h" |
#include "chromeos/dbus/ibus/ibus_property.h" |
#include "chromeos/dbus/ibus/ibus_text.h" |
@@ -25,7 +27,102 @@ class IBusEngineServiceImpl : public IBusEngineService { |
object_path_(object_path), |
weak_ptr_factory_(this) { |
exported_object_ = bus->GetExportedObject(object_path_); |
- // TODO(nona): Export methods here. |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kFocusInMethod, |
+ base::Bind(&IBusEngineServiceImpl::FocusIn, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kFocusOutMethod, |
+ base::Bind(&IBusEngineServiceImpl::FocusOut, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kEnableMethod, |
+ base::Bind(&IBusEngineServiceImpl::Enable, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kDisableMethod, |
+ base::Bind(&IBusEngineServiceImpl::Disable, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kPropertyActivateMethod, |
+ base::Bind(&IBusEngineServiceImpl::PropertyActivate, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kPropertyShowMethod, |
+ base::Bind(&IBusEngineServiceImpl::PropertyShow, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kPropertyHideMethod, |
+ base::Bind(&IBusEngineServiceImpl::PropertyHide, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kSetCapabilityMethod, |
+ base::Bind(&IBusEngineServiceImpl::SetCapability, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kResetMethod, |
+ base::Bind(&IBusEngineServiceImpl::Reset, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kProcessKeyEventMethod, |
+ base::Bind(&IBusEngineServiceImpl::ProcessKeyEvent, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kCandidateClickedMethod, |
+ base::Bind(&IBusEngineServiceImpl::CandidateClicked, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ exported_object_->ExportMethod( |
+ ibus::engine::kServiceInterface, |
+ ibus::engine::kSetSurroundingTextMethod, |
+ base::Bind(&IBusEngineServiceImpl::SetSurroundingText, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&IBusEngineServiceImpl::OnMethodExported, |
+ weak_ptr_factory_.GetWeakPtr())); |
} |
virtual ~IBusEngineServiceImpl() { |
@@ -44,8 +141,11 @@ class IBusEngineServiceImpl : public IBusEngineService { |
// IBusEngineService override. |
virtual void RegisterProperties( |
const ibus::IBusPropertyList& property_list) OVERRIDE { |
- // TODO(nona): Implement this. |
- NOTIMPLEMENTED(); |
+ dbus::Signal signal(ibus::engine::kServiceInterface, |
+ ibus::engine::kRegisterPropertiesSignal); |
+ dbus::MessageWriter writer(&signal); |
+ AppendIBusPropertyList(property_list, &writer); |
+ exported_object_->SendSignal(&signal); |
} |
// IBusEngineService override. |
@@ -53,44 +153,296 @@ class IBusEngineServiceImpl : public IBusEngineService { |
uint32 cursor_pos, |
bool is_visible, |
IBusEnginePreeditFocusOutMode mode) OVERRIDE { |
- // TODO(nona): Implement this. |
- NOTIMPLEMENTED(); |
+ dbus::Signal signal(ibus::engine::kServiceInterface, |
+ ibus::engine::kUpdatePreeditSignal); |
+ dbus::MessageWriter writer(&signal); |
+ AppendIBusText(ibus_text, &writer); |
+ writer.AppendUint32(cursor_pos); |
+ writer.AppendBool(is_visible); |
+ writer.AppendUint32(static_cast<uint32>(mode)); |
+ exported_object_->SendSignal(&signal); |
} |
// IBusEngineService override. |
virtual void UpdateAuxiliaryText(const ibus::IBusText& ibus_text, |
bool is_visible) OVERRIDE { |
- // TODO(nona): Implement this. |
- NOTIMPLEMENTED(); |
+ dbus::Signal signal(ibus::engine::kServiceInterface, |
+ ibus::engine::kUpdateAuxiliaryTextSignal); |
+ dbus::MessageWriter writer(&signal); |
+ AppendIBusText(ibus_text, &writer); |
+ writer.AppendBool(is_visible); |
+ exported_object_->SendSignal(&signal); |
} |
// IBusEngineService override. |
virtual void UpdateLookupTable(const ibus::IBusLookupTable& lookup_table, |
bool is_visible) OVERRIDE { |
- // TODO(nona): Implement this. |
- NOTIMPLEMENTED(); |
+ dbus::Signal signal(ibus::engine::kServiceInterface, |
+ ibus::engine::kUpdateLookupTableSignal); |
+ dbus::MessageWriter writer(&signal); |
+ AppendIBusLookupTable(lookup_table, &writer); |
+ writer.AppendBool(is_visible); |
+ exported_object_->SendSignal(&signal); |
} |
// IBusEngineService override. |
virtual void UpdateProperty(const ibus::IBusProperty& property) OVERRIDE { |
- // TODO(nona): Implement this. |
- NOTIMPLEMENTED(); |
+ dbus::Signal signal(ibus::engine::kServiceInterface, |
+ ibus::engine::kUpdatePropertySignal); |
+ dbus::MessageWriter writer(&signal); |
+ AppendIBusProperty(property, &writer); |
+ exported_object_->SendSignal(&signal); |
} |
// IBusEngineService override. |
virtual void ForwardKeyEvent(uint32 keyval, uint32 keycode, |
uint32 state) OVERRIDE { |
- // TODO(nona): Implement this. |
- NOTIMPLEMENTED(); |
+ dbus::Signal signal(ibus::engine::kServiceInterface, |
+ ibus::engine::kForwardKeyEventSignal); |
+ dbus::MessageWriter writer(&signal); |
+ writer.AppendUint32(keyval); |
+ writer.AppendUint32(keycode); |
+ writer.AppendUint32(state); |
+ exported_object_->SendSignal(&signal); |
} |
// IBusEngineService override. |
virtual void RequireSurroundingText() OVERRIDE { |
- // TODO(nona): Implement this. |
- NOTIMPLEMENTED(); |
+ dbus::Signal signal(ibus::engine::kServiceInterface, |
+ ibus::engine::kRequireSurroundingTextSignal); |
+ exported_object_->SendSignal(&signal); |
} |
private: |
+ // Handles FocusIn method call from ibus-daemon. |
+ void FocusIn(dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ DCHECK(engine_handler_.get()); |
+ engine_handler_->FocusIn(); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ // Handles FocusOut method call from ibus-daemon. |
+ void FocusOut(dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ DCHECK(engine_handler_.get()); |
+ engine_handler_->FocusOut(); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ // Handles Enable method call from ibus-daemon. |
+ void Enable(dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ DCHECK(engine_handler_.get()); |
+ engine_handler_->Enable(); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ // Handles Disable method call from ibus-daemon. |
+ void Disable(dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ DCHECK(engine_handler_.get()); |
+ engine_handler_->Disable(); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ // Handles PropertyActivate method call from ibus-daemon. |
+ void PropertyActivate(dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ dbus::MessageReader reader(method_call); |
+ std::string property_name; |
+ if (!reader.PopString(&property_name)) { |
+ LOG(WARNING) << "PropertyActivate called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ uint32 property_state = 0; |
+ if (!reader.PopUint32(&property_state)) { |
+ LOG(WARNING) << "PropertyActivate called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ DCHECK(engine_handler_.get()); |
+ engine_handler_->PropertyActivate( |
+ property_name, |
+ static_cast<IBusEngineHandlerInterface::IBusPropertyState>( |
+ property_state)); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ // Handles PropertyShow method call from ibus-daemon. |
+ void PropertyShow(dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ dbus::MessageReader reader(method_call); |
+ std::string property_name; |
+ if (!reader.PopString(&property_name)) { |
+ LOG(WARNING) << "PropertyShow called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ DCHECK(engine_handler_.get()); |
+ engine_handler_->PropertyShow(property_name); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ // Handles PropertyHide method call from ibus-daemon. |
+ void PropertyHide(dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ dbus::MessageReader reader(method_call); |
+ std::string property_name; |
+ if (!reader.PopString(&property_name)) { |
+ LOG(WARNING) << "PropertyHide called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ DCHECK(engine_handler_.get()); |
+ engine_handler_->PropertyHide(property_name); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ // Handles SetCapability method call from ibus-daemon. |
+ void SetCapability(dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ dbus::MessageReader reader(method_call); |
+ uint32 capability = 0; |
+ if (!reader.PopUint32(&capability)) { |
+ LOG(WARNING) << "SetCapability called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ DCHECK(engine_handler_.get()); |
+ engine_handler_->SetCapability( |
+ static_cast<IBusEngineHandlerInterface::IBusCapability>(capability)); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ void Reset(dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ DCHECK(engine_handler_.get()); |
+ engine_handler_->Reset(); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ // Handles ProcessKeyEvent method call from ibus-daemon. |
+ void ProcessKeyEvent(dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ dbus::MessageReader reader(method_call); |
+ uint32 keysym = 0; |
+ if (!reader.PopUint32(&keysym)) { |
+ LOG(WARNING) << "ProcessKeyEvent called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ uint32 keycode = 0; |
+ if (!reader.PopUint32(&keycode)) { |
+ LOG(WARNING) << "ProcessKeyEvent called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ uint32 state = 0; |
+ if (!reader.PopUint32(&state)) { |
+ LOG(WARNING) << "ProcessKeyEvent called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ DCHECK(engine_handler_.get()); |
+ bool consume = engine_handler_->ProcessKeyEvent(keysym, keycode, state); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ dbus::MessageWriter writer(response.get()); |
+ writer.AppendBool(consume); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ // Handles CandidateClicked method call from ibus-daemon. |
+ void CandidateClicked(dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ dbus::MessageReader reader(method_call); |
+ uint32 index = 0; |
+ if (!reader.PopUint32(&index)) { |
+ LOG(WARNING) << "CandidateClicked called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ uint32 button = 0; |
+ if (!reader.PopUint32(&button)) { |
+ LOG(WARNING) << "CandidateClicked called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ uint32 state = 0; |
+ if (!reader.PopUint32(&state)) { |
+ LOG(WARNING) << "CandidateClicked called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ DCHECK(engine_handler_.get()); |
+ engine_handler_->CandidateClicked( |
+ index, |
+ static_cast<IBusEngineHandlerInterface::IBusMouseButton>(button), |
+ state); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ // Handles SetSurroundingText method call from ibus-daemon. |
+ void SetSurroundingText( |
+ dbus::MethodCall* method_call, |
+ dbus::ExportedObject::ResponseSender response_sender) { |
+ dbus::MessageReader reader(method_call); |
+ std::string text; |
+ if (!reader.PopString(&text)) { |
+ LOG(WARNING) << "SetSurroundingText called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ uint32 cursor_pos = 0; |
+ if (!reader.PopUint32(&cursor_pos)) { |
+ LOG(WARNING) << "CandidateClicked called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ uint32 anchor_pos = 0; |
+ if (!reader.PopUint32(&anchor_pos)) { |
+ LOG(WARNING) << "CandidateClicked called with incorrect parameters: " |
+ << method_call->ToString(); |
+ return; |
+ } |
+ |
+ DCHECK(engine_handler_.get()); |
+ engine_handler_->SetSurroundingText(text, cursor_pos, anchor_pos); |
+ scoped_ptr<dbus::Response> response( |
+ dbus::Response::FromMethodCall(method_call)); |
+ response_sender.Run(response.get()); |
+ } |
+ |
+ // Called when the method call is exported. |
+ void OnMethodExported(const std::string& interface_name, |
+ const std::string& method_name, |
+ bool success) { |
+ LOG_IF(WARNING, !success) << "Failed to export " |
+ << interface_name << "." << method_name; |
+ } |
+ |
// D-Bus bus object used for unregistering exported methods in dtor. |
dbus::Bus* bus_; |