Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(535)

Unified Diff: chromeos/dbus/ibus/ibus_engine_service.cc

Issue 10806006: Implement IBusEngineService (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix wrong usage of Message Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chromeos/dbus/ibus/ibus_constants.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_;
« no previous file with comments | « chromeos/dbus/ibus/ibus_constants.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698