Index: chromeos/dbus/ibus/ibus_input_context_client.cc |
diff --git a/chromeos/dbus/ibus/ibus_input_context_client.cc b/chromeos/dbus/ibus/ibus_input_context_client.cc |
index 8f86077130bf2b26e8ee0b1d119966bc75ecc289..86d95369ff958066ad0ab339ce0790ec43343bf9 100644 |
--- a/chromeos/dbus/ibus/ibus_input_context_client.cc |
+++ b/chromeos/dbus/ibus/ibus_input_context_client.cc |
@@ -26,6 +26,7 @@ class IBusInputContextClientImpl : public IBusInputContextClient { |
public: |
IBusInputContextClientImpl() |
: proxy_(NULL), |
+ is_xkb_layout_(true), |
weak_ptr_factory_(this) { |
} |
@@ -51,6 +52,18 @@ class IBusInputContextClientImpl : public IBusInputContextClient { |
} |
// IBusInputContextClient override. |
+ virtual void SetSetCursorLocationHandler( |
+ const SetCursorLocationHandler& set_cursor_location_handler) OVERRIDE { |
+ DCHECK(!set_cursor_location_handler.is_null()); |
+ set_cursor_location_handler_ = set_cursor_location_handler; |
+ } |
+ |
+ // IBusInputContextClient override. |
+ virtual void UnsetSetCursorLocationHandler() OVERRIDE { |
+ set_cursor_location_handler_.Reset(); |
+ } |
+ |
+ // IBusInputContextClient override. |
virtual void ResetObjectProxy() OVERRIDE { |
// Do not delete proxy here, proxy object is managed by dbus::Bus object. |
proxy_ = NULL; |
@@ -93,17 +106,10 @@ class IBusInputContextClientImpl : public IBusInputContextClient { |
} |
// IBusInputContextClient override. |
- virtual void SetCursorLocation(int32 x, int32 y, int32 width, |
- int32 height) OVERRIDE { |
- dbus::MethodCall method_call(ibus::input_context::kServiceInterface, |
- ibus::input_context::kSetCursorLocationMethod); |
- dbus::MessageWriter writer(&method_call); |
- writer.AppendInt32(x); |
- writer.AppendInt32(y); |
- writer.AppendInt32(width); |
- writer.AppendInt32(height); |
- CallNoResponseMethod(&method_call, |
- ibus::input_context::kSetCursorLocationMethod); |
+ virtual void SetCursorLocation(const ibus::Rect& cursor_location, |
+ const ibus::Rect& composition_head) OVERRIDE { |
+ if (!set_cursor_location_handler_.is_null()) |
+ set_cursor_location_handler_.Run(cursor_location, composition_head); |
} |
// IBusInputContextClient override. |
@@ -159,6 +165,17 @@ class IBusInputContextClientImpl : public IBusInputContextClient { |
CallNoResponseMethod(&method_call, |
ibus::input_context::kPropertyActivateMethod); |
} |
+ |
+ // IBusInputContextClient override. |
+ virtual bool IsXKBLayout() OVERRIDE { |
+ return is_xkb_layout_; |
+ } |
+ |
+ // IBusInputContextClient override. |
+ virtual void SetIsXKBLayout(bool is_xkb_layout) OVERRIDE { |
+ is_xkb_layout_ = is_xkb_layout; |
+ } |
+ |
private: |
void CallNoResponseMethod(dbus::MethodCall* method_call, |
const std::string& method_name) { |
@@ -331,6 +348,11 @@ class IBusInputContextClientImpl : public IBusInputContextClient { |
// The pointer for input context handler. This can be NULL. |
IBusInputContextHandlerInterface* handler_; |
+ SetCursorLocationHandler set_cursor_location_handler_; |
+ |
+ // True if the current input method is xkb layout. |
+ bool is_xkb_layout_; |
+ |
base::WeakPtrFactory<IBusInputContextClientImpl> weak_ptr_factory_; |
DISALLOW_COPY_AND_ASSIGN(IBusInputContextClientImpl); |
@@ -344,23 +366,24 @@ class IBusInputContextClientStubImpl : public IBusInputContextClient { |
virtual ~IBusInputContextClientStubImpl() {} |
public: |
- // IBusInputContextClient override. |
+ // IBusInputContextClient overrides. |
virtual void Initialize(dbus::Bus* bus, |
const dbus::ObjectPath& object_path) OVERRIDE {} |
virtual void SetInputContextHandler( |
IBusInputContextHandlerInterface* handler) OVERRIDE {} |
- // IBusInputContextClient override. |
+ virtual void SetSetCursorLocationHandler( |
+ const SetCursorLocationHandler& set_cursor_location_handler) OVERRIDE {} |
+ virtual void UnsetSetCursorLocationHandler() OVERRIDE {} |
virtual void ResetObjectProxy() OVERRIDE {} |
- // IBusInputContextClient override. |
virtual bool IsObjectProxyReady() const OVERRIDE { |
return true; |
} |
- // IBusInputContextClient overrides. |
virtual void SetCapabilities(uint32 capability) OVERRIDE {} |
virtual void FocusIn() OVERRIDE {} |
virtual void FocusOut() OVERRIDE {} |
virtual void Reset() OVERRIDE {} |
- virtual void SetCursorLocation(int32 x, int32 y, int32 w, int32 h) OVERRIDE {} |
+ virtual void SetCursorLocation(const ibus::Rect& cursor_location, |
+ const ibus::Rect& composition_head) OVERRIDE {} |
virtual void ProcessKeyEvent( |
uint32 keyval, |
uint32 keycode, |
@@ -374,6 +397,8 @@ class IBusInputContextClientStubImpl : public IBusInputContextClient { |
uint32 end_index) OVERRIDE {} |
virtual void PropertyActivate(const std::string& key, |
ibus::IBusPropertyState state) OVERRIDE {} |
+ virtual bool IsXKBLayout() OVERRIDE { return true; } |
+ virtual void SetIsXKBLayout(bool is_xkb_layout) OVERRIDE {} |
private: |
DISALLOW_COPY_AND_ASSIGN(IBusInputContextClientStubImpl); |