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

Side by Side Diff: chromeos/dbus/ibus/ibus_input_context_client.cc

Issue 12017010: Introduce bypass logic for SetCursorLocation message. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 23
24 // The IBusInputContextClient implementation. 24 // The IBusInputContextClient implementation.
25 class IBusInputContextClientImpl : public IBusInputContextClient { 25 class IBusInputContextClientImpl : public IBusInputContextClient {
26 public: 26 public:
27 IBusInputContextClientImpl() 27 IBusInputContextClientImpl()
28 : proxy_(NULL), 28 : proxy_(NULL),
29 is_xkb_layout_(true),
29 weak_ptr_factory_(this) { 30 weak_ptr_factory_(this) {
30 } 31 }
31 32
32 virtual ~IBusInputContextClientImpl() {} 33 virtual ~IBusInputContextClientImpl() {}
33 34
34 public: 35 public:
35 // IBusInputContextClient override. 36 // IBusInputContextClient override.
36 virtual void Initialize(dbus::Bus* bus, 37 virtual void Initialize(dbus::Bus* bus,
37 const dbus::ObjectPath& object_path) OVERRIDE { 38 const dbus::ObjectPath& object_path) OVERRIDE {
38 if (proxy_ != NULL) { 39 if (proxy_ != NULL) {
39 LOG(ERROR) << "IBusInputContextClient is already initialized."; 40 LOG(ERROR) << "IBusInputContextClient is already initialized.";
40 return; 41 return;
41 } 42 }
42 proxy_ = bus->GetObjectProxy(ibus::kServiceName, object_path); 43 proxy_ = bus->GetObjectProxy(ibus::kServiceName, object_path);
43 44
44 ConnectSignals(); 45 ConnectSignals();
45 } 46 }
46 47
47 // IBusInputContextClient override. 48 // IBusInputContextClient override.
48 virtual void SetInputContextHandler( 49 virtual void SetInputContextHandler(
49 IBusInputContextHandlerInterface* handler) OVERRIDE { 50 IBusInputContextHandlerInterface* handler) OVERRIDE {
50 handler_ = handler; 51 handler_ = handler;
51 } 52 }
52 53
53 // IBusInputContextClient override. 54 // IBusInputContextClient override.
55 virtual void SetSetCursorLocationHandler(
56 const SetCursorLocationHandler& set_cursor_location_handler) OVERRIDE {
57 DCHECK(!set_cursor_location_handler.is_null());
58 set_cursor_location_handler_ = set_cursor_location_handler;
59 }
60
61 // IBusInputContextClient override.
62 virtual void UnsetSetCursorLocationHandler() OVERRIDE {
63 set_cursor_location_handler_.Reset();
64 }
65
66 // IBusInputContextClient override.
54 virtual void ResetObjectProxy() OVERRIDE { 67 virtual void ResetObjectProxy() OVERRIDE {
55 // Do not delete proxy here, proxy object is managed by dbus::Bus object. 68 // Do not delete proxy here, proxy object is managed by dbus::Bus object.
56 proxy_ = NULL; 69 proxy_ = NULL;
57 } 70 }
58 71
59 // IBusInputContextClient override. 72 // IBusInputContextClient override.
60 virtual bool IsObjectProxyReady() const OVERRIDE { 73 virtual bool IsObjectProxyReady() const OVERRIDE {
61 return proxy_ != NULL; 74 return proxy_ != NULL;
62 } 75 }
63 76
(...skipping 22 matching lines...) Expand all
86 } 99 }
87 100
88 // IBusInputContextClient override. 101 // IBusInputContextClient override.
89 virtual void Reset() OVERRIDE { 102 virtual void Reset() OVERRIDE {
90 dbus::MethodCall method_call(ibus::input_context::kServiceInterface, 103 dbus::MethodCall method_call(ibus::input_context::kServiceInterface,
91 ibus::input_context::kResetMethod); 104 ibus::input_context::kResetMethod);
92 CallNoResponseMethod(&method_call, ibus::input_context::kResetMethod); 105 CallNoResponseMethod(&method_call, ibus::input_context::kResetMethod);
93 } 106 }
94 107
95 // IBusInputContextClient override. 108 // IBusInputContextClient override.
96 virtual void SetCursorLocation(int32 x, int32 y, int32 width, 109 virtual void SetCursorLocation(const ibus::Rect& cursor_location,
97 int32 height) OVERRIDE { 110 const ibus::Rect& composition_head) OVERRIDE {
98 dbus::MethodCall method_call(ibus::input_context::kServiceInterface, 111 if (!set_cursor_location_handler_.is_null())
99 ibus::input_context::kSetCursorLocationMethod); 112 set_cursor_location_handler_.Run(cursor_location, composition_head);
100 dbus::MessageWriter writer(&method_call);
101 writer.AppendInt32(x);
102 writer.AppendInt32(y);
103 writer.AppendInt32(width);
104 writer.AppendInt32(height);
105 CallNoResponseMethod(&method_call,
106 ibus::input_context::kSetCursorLocationMethod);
107 } 113 }
108 114
109 // IBusInputContextClient override. 115 // IBusInputContextClient override.
110 virtual void ProcessKeyEvent( 116 virtual void ProcessKeyEvent(
111 uint32 keyval, 117 uint32 keyval,
112 uint32 keycode, 118 uint32 keycode,
113 uint32 state, 119 uint32 state,
114 const ProcessKeyEventCallback& callback, 120 const ProcessKeyEventCallback& callback,
115 const ErrorCallback& error_callback) OVERRIDE { 121 const ErrorCallback& error_callback) OVERRIDE {
116 dbus::MethodCall method_call(ibus::input_context::kServiceInterface, 122 dbus::MethodCall method_call(ibus::input_context::kServiceInterface,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 dbus::MessageWriter writer(&method_call); 158 dbus::MessageWriter writer(&method_call);
153 writer.AppendString(key); 159 writer.AppendString(key);
154 if (state == ibus::IBUS_PROPERTY_STATE_CHECKED) { 160 if (state == ibus::IBUS_PROPERTY_STATE_CHECKED) {
155 writer.AppendUint32(ibus::IBUS_PROPERTY_STATE_CHECKED); 161 writer.AppendUint32(ibus::IBUS_PROPERTY_STATE_CHECKED);
156 } else { 162 } else {
157 writer.AppendUint32(ibus::IBUS_PROPERTY_STATE_UNCHECKED); 163 writer.AppendUint32(ibus::IBUS_PROPERTY_STATE_UNCHECKED);
158 } 164 }
159 CallNoResponseMethod(&method_call, 165 CallNoResponseMethod(&method_call,
160 ibus::input_context::kPropertyActivateMethod); 166 ibus::input_context::kPropertyActivateMethod);
161 } 167 }
168
169 // IBusInputContextClient override.
170 virtual bool IsXKBLayout() OVERRIDE {
171 return is_xkb_layout_;
172 }
173
174 // IBusInputContextClient override.
175 virtual void SetIsXKBLayout(bool is_xkb_layout) OVERRIDE {
176 is_xkb_layout_ = is_xkb_layout;
177 }
178
162 private: 179 private:
163 void CallNoResponseMethod(dbus::MethodCall* method_call, 180 void CallNoResponseMethod(dbus::MethodCall* method_call,
164 const std::string& method_name) { 181 const std::string& method_name) {
165 proxy_->CallMethodWithErrorCallback( 182 proxy_->CallMethodWithErrorCallback(
166 method_call, 183 method_call,
167 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 184 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
168 base::Bind(&IBusInputContextClientImpl::DefaultCallback, 185 base::Bind(&IBusInputContextClientImpl::DefaultCallback,
169 method_name), 186 method_name),
170 base::Bind(&IBusInputContextClientImpl::DefaultErrorCallback, 187 base::Bind(&IBusInputContextClientImpl::DefaultErrorCallback,
171 method_name)); 188 method_name));
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 bool succeeded) { 341 bool succeeded) {
325 LOG_IF(ERROR, !succeeded) << "Connect to " << interface << " " 342 LOG_IF(ERROR, !succeeded) << "Connect to " << interface << " "
326 << signal << " failed."; 343 << signal << " failed.";
327 } 344 }
328 345
329 dbus::ObjectProxy* proxy_; 346 dbus::ObjectProxy* proxy_;
330 347
331 // The pointer for input context handler. This can be NULL. 348 // The pointer for input context handler. This can be NULL.
332 IBusInputContextHandlerInterface* handler_; 349 IBusInputContextHandlerInterface* handler_;
333 350
351 SetCursorLocationHandler set_cursor_location_handler_;
352
353 // True if the current input method is xkb layout.
354 bool is_xkb_layout_;
355
334 base::WeakPtrFactory<IBusInputContextClientImpl> weak_ptr_factory_; 356 base::WeakPtrFactory<IBusInputContextClientImpl> weak_ptr_factory_;
335 357
336 DISALLOW_COPY_AND_ASSIGN(IBusInputContextClientImpl); 358 DISALLOW_COPY_AND_ASSIGN(IBusInputContextClientImpl);
337 }; 359 };
338 360
339 // A stub implementation of IBusInputContextClient. 361 // A stub implementation of IBusInputContextClient.
340 class IBusInputContextClientStubImpl : public IBusInputContextClient { 362 class IBusInputContextClientStubImpl : public IBusInputContextClient {
341 public: 363 public:
342 IBusInputContextClientStubImpl() {} 364 IBusInputContextClientStubImpl() {}
343 365
344 virtual ~IBusInputContextClientStubImpl() {} 366 virtual ~IBusInputContextClientStubImpl() {}
345 367
346 public: 368 public:
347 // IBusInputContextClient override. 369 // IBusInputContextClient overrides.
348 virtual void Initialize(dbus::Bus* bus, 370 virtual void Initialize(dbus::Bus* bus,
349 const dbus::ObjectPath& object_path) OVERRIDE {} 371 const dbus::ObjectPath& object_path) OVERRIDE {}
350 virtual void SetInputContextHandler( 372 virtual void SetInputContextHandler(
351 IBusInputContextHandlerInterface* handler) OVERRIDE {} 373 IBusInputContextHandlerInterface* handler) OVERRIDE {}
352 // IBusInputContextClient override. 374 virtual void SetSetCursorLocationHandler(
375 const SetCursorLocationHandler& set_cursor_location_handler) OVERRIDE {}
376 virtual void UnsetSetCursorLocationHandler() OVERRIDE {}
353 virtual void ResetObjectProxy() OVERRIDE {} 377 virtual void ResetObjectProxy() OVERRIDE {}
354 // IBusInputContextClient override.
355 virtual bool IsObjectProxyReady() const OVERRIDE { 378 virtual bool IsObjectProxyReady() const OVERRIDE {
356 return true; 379 return true;
357 } 380 }
358 // IBusInputContextClient overrides.
359 virtual void SetCapabilities(uint32 capability) OVERRIDE {} 381 virtual void SetCapabilities(uint32 capability) OVERRIDE {}
360 virtual void FocusIn() OVERRIDE {} 382 virtual void FocusIn() OVERRIDE {}
361 virtual void FocusOut() OVERRIDE {} 383 virtual void FocusOut() OVERRIDE {}
362 virtual void Reset() OVERRIDE {} 384 virtual void Reset() OVERRIDE {}
363 virtual void SetCursorLocation(int32 x, int32 y, int32 w, int32 h) OVERRIDE {} 385 virtual void SetCursorLocation(const ibus::Rect& cursor_location,
386 const ibus::Rect& composition_head) OVERRIDE {}
364 virtual void ProcessKeyEvent( 387 virtual void ProcessKeyEvent(
365 uint32 keyval, 388 uint32 keyval,
366 uint32 keycode, 389 uint32 keycode,
367 uint32 state, 390 uint32 state,
368 const ProcessKeyEventCallback& callback, 391 const ProcessKeyEventCallback& callback,
369 const ErrorCallback& error_callback) OVERRIDE { 392 const ErrorCallback& error_callback) OVERRIDE {
370 callback.Run(false); 393 callback.Run(false);
371 } 394 }
372 virtual void SetSurroundingText(const std::string& text, 395 virtual void SetSurroundingText(const std::string& text,
373 uint32 start_index, 396 uint32 start_index,
374 uint32 end_index) OVERRIDE {} 397 uint32 end_index) OVERRIDE {}
375 virtual void PropertyActivate(const std::string& key, 398 virtual void PropertyActivate(const std::string& key,
376 ibus::IBusPropertyState state) OVERRIDE {} 399 ibus::IBusPropertyState state) OVERRIDE {}
400 virtual bool IsXKBLayout() OVERRIDE { return true; }
401 virtual void SetIsXKBLayout(bool is_xkb_layout) OVERRIDE {}
377 402
378 private: 403 private:
379 DISALLOW_COPY_AND_ASSIGN(IBusInputContextClientStubImpl); 404 DISALLOW_COPY_AND_ASSIGN(IBusInputContextClientStubImpl);
380 }; 405 };
381 406
382 } // namespace 407 } // namespace
383 408
384 /////////////////////////////////////////////////////////////////////////////// 409 ///////////////////////////////////////////////////////////////////////////////
385 // IBusInputContextClient 410 // IBusInputContextClient
386 411
387 IBusInputContextClient::IBusInputContextClient() {} 412 IBusInputContextClient::IBusInputContextClient() {}
388 413
389 IBusInputContextClient::~IBusInputContextClient() {} 414 IBusInputContextClient::~IBusInputContextClient() {}
390 415
391 // static 416 // static
392 IBusInputContextClient* IBusInputContextClient::Create( 417 IBusInputContextClient* IBusInputContextClient::Create(
393 DBusClientImplementationType type) { 418 DBusClientImplementationType type) {
394 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) { 419 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) {
395 return new IBusInputContextClientImpl(); 420 return new IBusInputContextClientImpl();
396 } 421 }
397 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); 422 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
398 return new IBusInputContextClientStubImpl(); 423 return new IBusInputContextClientStubImpl();
399 } 424 }
400 } // namespace chromeos 425 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/dbus/ibus/ibus_input_context_client.h ('k') | chromeos/dbus/ibus/ibus_input_context_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698