| 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 "chromeos/dbus/ibus/ibus_input_context_client.h" | 5 #include "chromeos/dbus/ibus/ibus_input_context_client.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "chromeos/dbus/ibus/ibus_constants.h" | 10 #include "chromeos/dbus/ibus/ibus_constants.h" |
| 11 #include "chromeos/dbus/ibus/ibus_text.h" | 11 #include "chromeos/dbus/ibus/ibus_text.h" |
| 12 #include "dbus/bus.h" | 12 #include "dbus/bus.h" |
| 13 #include "dbus/message.h" | 13 #include "dbus/message.h" |
| 14 #include "dbus/object_path.h" | 14 #include "dbus/object_path.h" |
| 15 #include "dbus/object_proxy.h" | 15 #include "dbus/object_proxy.h" |
| 16 | 16 |
| 17 namespace chromeos { | 17 namespace chromeos { |
| 18 | 18 |
| 19 // TODO(nona): Remove after complete libibus removal. | 19 // TODO(nona): Remove after complete libibus removal. |
| 20 using chromeos::ibus::IBusText; | 20 using chromeos::ibus::IBusText; |
| 21 | 21 |
| 22 namespace { | 22 namespace { |
| 23 const char kIBusInputContextInterface[] = "org.freedesktop.IBus.InputContext"; | |
| 24 | |
| 25 // Signal names. | |
| 26 const char kCommitTextSignal[] = "CommitText"; | |
| 27 const char kForwardKeyEventSignal[] = "ForwardKeyEvent"; | |
| 28 const char kHidePreeditTextSignal[] = "HidePreeditText"; | |
| 29 const char kShowPreeditTextSignal[] = "ShowPreeditText"; | |
| 30 const char kUpdatePreeditTextSignal[] = "UpdatePreeditText"; | |
| 31 | |
| 32 // Method names. | |
| 33 const char kFocusInMethod[] = "FocusIn"; | |
| 34 const char kFocusOutMethod[] = "FocusOut"; | |
| 35 const char kResetMethod[] = "Reset"; | |
| 36 const char kSetCapabilitiesMethod[] = "SetCapabilities"; | |
| 37 const char kSetCursorLocationMethod[] = "SetCursorLocation"; | |
| 38 const char kProcessKeyEventMethod[] = "ProcessKeyEvent"; | |
| 39 | 23 |
| 40 // The IBusInputContextClient implementation. | 24 // The IBusInputContextClient implementation. |
| 41 class IBusInputContextClientImpl : public IBusInputContextClient { | 25 class IBusInputContextClientImpl : public IBusInputContextClient { |
| 42 public: | 26 public: |
| 43 IBusInputContextClientImpl() | 27 IBusInputContextClientImpl() |
| 44 : proxy_(NULL), | 28 : proxy_(NULL), |
| 45 weak_ptr_factory_(this) { | 29 weak_ptr_factory_(this) { |
| 46 } | 30 } |
| 47 | 31 |
| 48 virtual ~IBusInputContextClientImpl() {} | 32 virtual ~IBusInputContextClientImpl() {} |
| 49 | 33 |
| 50 public: | 34 public: |
| 51 // IBusInputContextClient override. | 35 // IBusInputContextClient override. |
| 52 virtual void Initialize(dbus::Bus* bus, | 36 virtual void Initialize(dbus::Bus* bus, |
| 53 const dbus::ObjectPath& object_path) OVERRIDE { | 37 const dbus::ObjectPath& object_path) OVERRIDE { |
| 54 if (proxy_ != NULL) { | 38 if (proxy_ != NULL) { |
| 55 LOG(ERROR) << "IBusInputContextClient is already initialized."; | 39 LOG(ERROR) << "IBusInputContextClient is already initialized."; |
| 56 return; | 40 return; |
| 57 } | 41 } |
| 58 proxy_ = bus->GetObjectProxy(kIBusServiceName, object_path); | 42 proxy_ = bus->GetObjectProxy(ibus::kServiceName, object_path); |
| 59 | 43 |
| 60 ConnectSignals(); | 44 ConnectSignals(); |
| 61 } | 45 } |
| 62 | 46 |
| 63 // IBusInputContextClient override. | 47 // IBusInputContextClient override. |
| 64 virtual void ResetObjectProxy() OVERRIDE { | 48 virtual void ResetObjectProxy() OVERRIDE { |
| 65 // Do not delete proxy here, proxy object is managed by dbus::Bus object. | 49 // Do not delete proxy here, proxy object is managed by dbus::Bus object. |
| 66 proxy_ = NULL; | 50 proxy_ = NULL; |
| 67 } | 51 } |
| 68 | 52 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 show_preedit_text_handler_.Reset(); | 110 show_preedit_text_handler_.Reset(); |
| 127 } | 111 } |
| 128 | 112 |
| 129 // IBusInputContextClient override. | 113 // IBusInputContextClient override. |
| 130 virtual void UnsetHidePreeditTextHandler() OVERRIDE { | 114 virtual void UnsetHidePreeditTextHandler() OVERRIDE { |
| 131 hide_preedit_text_handler_.Reset(); | 115 hide_preedit_text_handler_.Reset(); |
| 132 } | 116 } |
| 133 | 117 |
| 134 // IBusInputContextClient override. | 118 // IBusInputContextClient override. |
| 135 virtual void SetCapabilities(uint32 capabilities) OVERRIDE { | 119 virtual void SetCapabilities(uint32 capabilities) OVERRIDE { |
| 136 dbus::MethodCall method_call(kIBusInputContextInterface, | 120 dbus::MethodCall method_call(ibus::input_context::kServiceInterface, |
| 137 kSetCapabilitiesMethod); | 121 ibus::input_context::kSetCapabilitiesMethod); |
| 138 dbus::MessageWriter writer(&method_call); | 122 dbus::MessageWriter writer(&method_call); |
| 139 writer.AppendUint32(capabilities); | 123 writer.AppendUint32(capabilities); |
| 140 CallNoResponseMethod(&method_call, kSetCapabilitiesMethod); | 124 CallNoResponseMethod(&method_call, |
| 125 ibus::input_context::kSetCapabilitiesMethod); |
| 141 } | 126 } |
| 142 | 127 |
| 143 // IBusInputContextClient override. | 128 // IBusInputContextClient override. |
| 144 virtual void FocusIn() OVERRIDE { | 129 virtual void FocusIn() OVERRIDE { |
| 145 dbus::MethodCall method_call(kIBusInputContextInterface, kFocusInMethod); | 130 dbus::MethodCall method_call(ibus::input_context::kServiceInterface, |
| 146 CallNoResponseMethod(&method_call, kFocusInMethod); | 131 ibus::input_context::kFocusInMethod); |
| 132 CallNoResponseMethod(&method_call, ibus::input_context::kFocusInMethod); |
| 147 } | 133 } |
| 148 | 134 |
| 149 // IBusInputContextClient override. | 135 // IBusInputContextClient override. |
| 150 virtual void FocusOut() OVERRIDE { | 136 virtual void FocusOut() OVERRIDE { |
| 151 dbus::MethodCall method_call(kIBusInputContextInterface, kFocusOutMethod); | 137 dbus::MethodCall method_call(ibus::input_context::kServiceInterface, |
| 152 CallNoResponseMethod(&method_call, kFocusOutMethod); | 138 ibus::input_context::kFocusOutMethod); |
| 139 CallNoResponseMethod(&method_call, ibus::input_context::kFocusOutMethod); |
| 153 } | 140 } |
| 154 | 141 |
| 155 // IBusInputContextClient override. | 142 // IBusInputContextClient override. |
| 156 virtual void Reset() OVERRIDE { | 143 virtual void Reset() OVERRIDE { |
| 157 dbus::MethodCall method_call(kIBusInputContextInterface, kResetMethod); | 144 dbus::MethodCall method_call(ibus::input_context::kServiceInterface, |
| 158 CallNoResponseMethod(&method_call, kResetMethod); | 145 ibus::input_context::kResetMethod); |
| 146 CallNoResponseMethod(&method_call, ibus::input_context::kResetMethod); |
| 159 } | 147 } |
| 160 | 148 |
| 161 // IBusInputContextClient override. | 149 // IBusInputContextClient override. |
| 162 virtual void SetCursorLocation(int32 x, int32 y, int32 width, | 150 virtual void SetCursorLocation(int32 x, int32 y, int32 width, |
| 163 int32 height) OVERRIDE { | 151 int32 height) OVERRIDE { |
| 164 dbus::MethodCall method_call(kIBusInputContextInterface, | 152 dbus::MethodCall method_call(ibus::input_context::kServiceInterface, |
| 165 kSetCursorLocationMethod); | 153 ibus::input_context::kSetCursorLocationMethod); |
| 166 dbus::MessageWriter writer(&method_call); | 154 dbus::MessageWriter writer(&method_call); |
| 167 writer.AppendInt32(x); | 155 writer.AppendInt32(x); |
| 168 writer.AppendInt32(y); | 156 writer.AppendInt32(y); |
| 169 writer.AppendInt32(width); | 157 writer.AppendInt32(width); |
| 170 writer.AppendInt32(height); | 158 writer.AppendInt32(height); |
| 171 CallNoResponseMethod(&method_call, kSetCursorLocationMethod); | 159 CallNoResponseMethod(&method_call, |
| 160 ibus::input_context::kSetCursorLocationMethod); |
| 172 } | 161 } |
| 173 | 162 |
| 174 // IBusInputContextClient override. | 163 // IBusInputContextClient override. |
| 175 virtual void ProcessKeyEvent( | 164 virtual void ProcessKeyEvent( |
| 176 uint32 keyval, | 165 uint32 keyval, |
| 177 uint32 keycode, | 166 uint32 keycode, |
| 178 uint32 state, | 167 uint32 state, |
| 179 const ProcessKeyEventCallback& callback, | 168 const ProcessKeyEventCallback& callback, |
| 180 const ErrorCallback& error_callback) OVERRIDE { | 169 const ErrorCallback& error_callback) OVERRIDE { |
| 181 dbus::MethodCall method_call(kIBusInputContextInterface, | 170 dbus::MethodCall method_call(ibus::input_context::kServiceInterface, |
| 182 kProcessKeyEventMethod); | 171 ibus::input_context::kProcessKeyEventMethod); |
| 183 dbus::MessageWriter writer(&method_call); | 172 dbus::MessageWriter writer(&method_call); |
| 184 writer.AppendUint32(keyval); | 173 writer.AppendUint32(keyval); |
| 185 writer.AppendUint32(keycode); | 174 writer.AppendUint32(keycode); |
| 186 writer.AppendUint32(state); | 175 writer.AppendUint32(state); |
| 187 proxy_->CallMethodWithErrorCallback( | 176 proxy_->CallMethodWithErrorCallback( |
| 188 &method_call, | 177 &method_call, |
| 189 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 178 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 190 base::Bind(&IBusInputContextClientImpl::OnProcessKeyEvent, | 179 base::Bind(&IBusInputContextClientImpl::OnProcessKeyEvent, |
| 191 callback, | 180 callback, |
| 192 error_callback), | 181 error_callback), |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 | 295 |
| 307 // Handles HidePreeditText signal. | 296 // Handles HidePreeditText signal. |
| 308 void OnHidePreeditText(dbus::Signal* signal) { | 297 void OnHidePreeditText(dbus::Signal* signal) { |
| 309 if (!hide_preedit_text_handler_.is_null()) | 298 if (!hide_preedit_text_handler_.is_null()) |
| 310 hide_preedit_text_handler_.Run(); | 299 hide_preedit_text_handler_.Run(); |
| 311 } | 300 } |
| 312 | 301 |
| 313 // Connects signals to signal handlers. | 302 // Connects signals to signal handlers. |
| 314 void ConnectSignals() { | 303 void ConnectSignals() { |
| 315 proxy_->ConnectToSignal( | 304 proxy_->ConnectToSignal( |
| 316 kIBusInputContextInterface, | 305 ibus::input_context::kServiceInterface, |
| 317 kCommitTextSignal, | 306 ibus::input_context::kCommitTextSignal, |
| 318 base::Bind(&IBusInputContextClientImpl::OnCommitText, | 307 base::Bind(&IBusInputContextClientImpl::OnCommitText, |
| 319 weak_ptr_factory_.GetWeakPtr()), | 308 weak_ptr_factory_.GetWeakPtr()), |
| 320 base::Bind(&IBusInputContextClientImpl::OnSignalConnected, | 309 base::Bind(&IBusInputContextClientImpl::OnSignalConnected, |
| 321 weak_ptr_factory_.GetWeakPtr())); | 310 weak_ptr_factory_.GetWeakPtr())); |
| 322 | 311 |
| 323 proxy_->ConnectToSignal( | 312 proxy_->ConnectToSignal( |
| 324 kIBusInputContextInterface, | 313 ibus::input_context::kServiceInterface, |
| 325 kForwardKeyEventSignal, | 314 ibus::input_context::kForwardKeyEventSignal, |
| 326 base::Bind(&IBusInputContextClientImpl::OnForwardKeyEvent, | 315 base::Bind(&IBusInputContextClientImpl::OnForwardKeyEvent, |
| 327 weak_ptr_factory_.GetWeakPtr()), | 316 weak_ptr_factory_.GetWeakPtr()), |
| 328 base::Bind(&IBusInputContextClientImpl::OnSignalConnected, | 317 base::Bind(&IBusInputContextClientImpl::OnSignalConnected, |
| 329 weak_ptr_factory_.GetWeakPtr())); | 318 weak_ptr_factory_.GetWeakPtr())); |
| 330 | 319 |
| 331 proxy_->ConnectToSignal( | 320 proxy_->ConnectToSignal( |
| 332 kIBusInputContextInterface, | 321 ibus::input_context::kServiceInterface, |
| 333 kUpdatePreeditTextSignal, | 322 ibus::input_context::kUpdatePreeditTextSignal, |
| 334 base::Bind(&IBusInputContextClientImpl::OnUpdatePreeditText, | 323 base::Bind(&IBusInputContextClientImpl::OnUpdatePreeditText, |
| 335 weak_ptr_factory_.GetWeakPtr()), | 324 weak_ptr_factory_.GetWeakPtr()), |
| 336 base::Bind(&IBusInputContextClientImpl::OnSignalConnected, | 325 base::Bind(&IBusInputContextClientImpl::OnSignalConnected, |
| 337 weak_ptr_factory_.GetWeakPtr())); | 326 weak_ptr_factory_.GetWeakPtr())); |
| 338 | 327 |
| 339 proxy_->ConnectToSignal( | 328 proxy_->ConnectToSignal( |
| 340 kIBusInputContextInterface, | 329 ibus::input_context::kServiceInterface, |
| 341 kShowPreeditTextSignal, | 330 ibus::input_context::kShowPreeditTextSignal, |
| 342 base::Bind(&IBusInputContextClientImpl::OnShowPreeditText, | 331 base::Bind(&IBusInputContextClientImpl::OnShowPreeditText, |
| 343 weak_ptr_factory_.GetWeakPtr()), | 332 weak_ptr_factory_.GetWeakPtr()), |
| 344 base::Bind(&IBusInputContextClientImpl::OnSignalConnected, | 333 base::Bind(&IBusInputContextClientImpl::OnSignalConnected, |
| 345 weak_ptr_factory_.GetWeakPtr())); | 334 weak_ptr_factory_.GetWeakPtr())); |
| 346 | 335 |
| 347 proxy_->ConnectToSignal( | 336 proxy_->ConnectToSignal( |
| 348 kIBusInputContextInterface, | 337 ibus::input_context::kServiceInterface, |
| 349 kHidePreeditTextSignal, | 338 ibus::input_context::kHidePreeditTextSignal, |
| 350 base::Bind(&IBusInputContextClientImpl::OnHidePreeditText, | 339 base::Bind(&IBusInputContextClientImpl::OnHidePreeditText, |
| 351 weak_ptr_factory_.GetWeakPtr()), | 340 weak_ptr_factory_.GetWeakPtr()), |
| 352 base::Bind(&IBusInputContextClientImpl::OnSignalConnected, | 341 base::Bind(&IBusInputContextClientImpl::OnSignalConnected, |
| 353 weak_ptr_factory_.GetWeakPtr())); | 342 weak_ptr_factory_.GetWeakPtr())); |
| 354 } | 343 } |
| 355 | 344 |
| 356 // Handles the result of signal connection setup. | 345 // Handles the result of signal connection setup. |
| 357 void OnSignalConnected(const std::string& interface, | 346 void OnSignalConnected(const std::string& interface, |
| 358 const std::string& signal, | 347 const std::string& signal, |
| 359 bool succeeded) { | 348 bool succeeded) { |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 // static | 427 // static |
| 439 IBusInputContextClient* IBusInputContextClient::Create( | 428 IBusInputContextClient* IBusInputContextClient::Create( |
| 440 DBusClientImplementationType type) { | 429 DBusClientImplementationType type) { |
| 441 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) { | 430 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) { |
| 442 return new IBusInputContextClientImpl(); | 431 return new IBusInputContextClientImpl(); |
| 443 } | 432 } |
| 444 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 433 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
| 445 return new IBusInputContextClientStubImpl(); | 434 return new IBusInputContextClientStubImpl(); |
| 446 } | 435 } |
| 447 } // namespace chromeos | 436 } // namespace chromeos |
| OLD | NEW |