summaryrefslogtreecommitdiffstats
path: root/ui/base/ime/chromeos/ibus_bridge.h
diff options
context:
space:
mode:
Diffstat (limited to 'ui/base/ime/chromeos/ibus_bridge.h')
-rw-r--r--ui/base/ime/chromeos/ibus_bridge.h228
1 files changed, 228 insertions, 0 deletions
diff --git a/ui/base/ime/chromeos/ibus_bridge.h b/ui/base/ime/chromeos/ibus_bridge.h
new file mode 100644
index 0000000..8850edf
--- /dev/null
+++ b/ui/base/ime/chromeos/ibus_bridge.h
@@ -0,0 +1,228 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+// TODO(nona): Rename this file to ime_bridge.h
+
+#ifndef UI_BASE_IME_CHROMEOS_IBUS_BRIDGE_H_
+#define UI_BASE_IME_CHROMEOS_IBUS_BRIDGE_H_
+
+#include <string>
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "chromeos/ime/ime_constants.h"
+#include "ui/base/ui_export.h"
+
+namespace chromeos {
+namespace input_method {
+class CandidateWindow;
+} // namespace input_method
+
+class IBusText;
+
+class UI_EXPORT IBusInputContextHandlerInterface {
+ public:
+ // Called when the engine commit a text.
+ virtual void CommitText(const std::string& text) = 0;
+
+ // Called when the engine forward a key event.
+ virtual void ForwardKeyEvent(uint32 keyval, uint32 keycode, uint32 state) = 0;
+
+ // Called when the engine update preedit stroing.
+ virtual void UpdatePreeditText(const IBusText& text,
+ uint32 cursor_pos,
+ bool visible) = 0;
+
+ // Called when the engine request showing preedit string.
+ virtual void ShowPreeditText() = 0;
+
+ // Called when the engine request hiding preedit string.
+ virtual void HidePreeditText() = 0;
+
+ // Called when the engine request deleting surrounding string.
+ virtual void DeleteSurroundingText(int32 offset, uint32 length) = 0;
+};
+
+
+// A interface to handle the engine handler method call.
+class UI_EXPORT IBusEngineHandlerInterface {
+ public:
+ typedef base::Callback<void (bool consumed)> KeyEventDoneCallback;
+
+ // Following capability mask is introduced from
+ // http://ibus.googlecode.com/svn/docs/ibus-1.4/ibus-ibustypes.html#IBusCapabilite
+ // TODO(nona): Move to ibus_contants and merge one in ui/base/ime/*
+ enum IBusCapability {
+ IBUS_CAPABILITY_PREEDIT_TEXT = 1U,
+ IBUS_CAPABILITY_FOCUS = 8U,
+ };
+
+ virtual ~IBusEngineHandlerInterface() {}
+
+ // Called when the Chrome input field get the focus.
+ virtual void FocusIn(ibus::TextInputType text_input_type) = 0;
+
+ // Called when the Chrome input field lose the focus.
+ virtual void FocusOut() = 0;
+
+ // Called when the IME is enabled.
+ virtual void Enable() = 0;
+
+ // Called when the IME is disabled.
+ virtual void Disable() = 0;
+
+ // Called when a property is activated or changed.
+ virtual void PropertyActivate(const std::string& property_name) = 0;
+
+ // Called when a property is shown.
+ virtual void PropertyShow(const std::string& property_name) = 0;
+
+ // Called when a property is hidden.
+ virtual void PropertyHide(const std::string& property_name) = 0;
+
+ // Called when the Chrome input field set their capabilities.
+ virtual void SetCapability(IBusCapability capability) = 0;
+
+ // Called when the IME is reset.
+ virtual void Reset() = 0;
+
+ // Called when the key event is received. The |keycode| is raw layout
+ // independent keycode. The |keysym| is result of XLookupString function
+ // which translate |keycode| to keyboard layout dependent symbol value.
+ // Actual implementation must call |callback| after key event handling.
+ // For example: key press event for 'd' key on us layout and dvorak layout.
+ // keyval keycode state
+ // us layout : 0x64 0x20 0x00
+ // dvorak layout : 0x65 0x20 0x00
+ virtual void ProcessKeyEvent(uint32 keysym, uint32 keycode, uint32 state,
+ const KeyEventDoneCallback& callback) = 0;
+
+ // Called when the candidate in lookup table is clicked. The |index| is 0
+ // based candidate index in lookup table. The |state| is same value as
+ // GdkModifierType in
+ // http://developer.gnome.org/gdk/stable/gdk-Windows.html#GdkModifierType
+ virtual void CandidateClicked(uint32 index, ibus::IBusMouseButton button,
+ uint32 state) = 0;
+
+ // Called when a new surrounding text is set. The |text| is surrounding text
+ // and |cursor_pos| is 0 based index of cursor position in |text|. If there is
+ // selection range, |anchor_pos| represents opposite index from |cursor_pos|.
+ // Otherwise |anchor_pos| is equal to |cursor_pos|.
+ virtual void SetSurroundingText(const std::string& text, uint32 cursor_pos,
+ uint32 anchor_pos) = 0;
+
+ protected:
+ IBusEngineHandlerInterface() {}
+};
+
+// A interface to handle the candidate window related method call.
+class UI_EXPORT IBusPanelCandidateWindowHandlerInterface {
+ public:
+ virtual ~IBusPanelCandidateWindowHandlerInterface() {}
+
+ // Called when the IME updates the lookup table.
+ virtual void UpdateLookupTable(
+ const input_method::CandidateWindow& candidate_window,
+ bool visible) = 0;
+
+ // Called when the IME hides the lookup table.
+ virtual void HideLookupTable() = 0;
+
+ // Called when the IME updates the auxiliary text. The |text| is given in
+ // UTF-8 encoding.
+ virtual void UpdateAuxiliaryText(const std::string& text, bool visible) = 0;
+
+ // Called when the IME hides the auxiliary text.
+ virtual void HideAuxiliaryText() = 0;
+
+ // Called when the IME updates the preedit text. The |text| is given in
+ // UTF-8 encoding.
+ virtual void UpdatePreeditText(const std::string& text, uint32 cursor_pos,
+ bool visible) = 0;
+
+ // Called when the IME hides the preedit text.
+ virtual void HidePreeditText() = 0;
+
+ // Called when the application changes its caret bounds.
+ virtual void SetCursorBounds(const ibus::Rect& cursor_bounds,
+ const ibus::Rect& composition_head) = 0;
+
+ // Called when the text field's focus state is changed.
+ // |is_focused| is true when the text field gains the focus.
+ virtual void FocusStateChanged(bool is_focused) {}
+
+ protected:
+ IBusPanelCandidateWindowHandlerInterface() {}
+};
+
+
+// IBusBridge provides access of each IME related handler. This class is used
+// for IME implementation without ibus-daemon. The legacy ibus IME communicates
+// their engine with dbus protocol, but new implementation doesn't. Instead of
+// dbus communcation, new implementation calls target service(e.g. PanelService
+// or EngineService) directly by using this class.
+class UI_EXPORT IBusBridge {
+ public:
+ typedef base::Callback<void()> CreateEngineHandler;
+
+ virtual ~IBusBridge();
+
+ // Allocates the global instance. Must be called before any calls to Get().
+ static void Initialize();
+
+ // Releases the global instance.
+ static void Shutdown();
+
+ // Returns IBusBridge global instance. Initialize() must be called first.
+ static IBusBridge* Get();
+
+ // Returns current InputContextHandler. This function returns NULL if input
+ // context is not ready to use.
+ virtual IBusInputContextHandlerInterface* GetInputContextHandler() const = 0;
+
+ // Updates current InputContextHandler. If there is no active input context,
+ // pass NULL for |handler|. Caller must release |handler|.
+ virtual void SetInputContextHandler(
+ IBusInputContextHandlerInterface* handler) = 0;
+
+ // Returns current EngineHandler. This function returns NULL if current engine
+ // is not ready to use.
+ virtual IBusEngineHandlerInterface* GetEngineHandler() const = 0;
+
+ // Updates current EngineHandler. If there is no active engine service, pass
+ // NULL for |handler|. Caller must release |handler|.
+ virtual void SetEngineHandler(IBusEngineHandlerInterface* handler) = 0;
+
+ // Returns current CandidateWindowHandler. This function returns NULL if
+ // current candidate window is not ready to use.
+ virtual IBusPanelCandidateWindowHandlerInterface*
+ GetCandidateWindowHandler() const = 0;
+
+ // Updates current CandidatWindowHandler. If there is no active candidate
+ // window service, pass NULL for |handler|. Caller must release |handler|.
+ virtual void SetCandidateWindowHandler(
+ IBusPanelCandidateWindowHandlerInterface* handler) = 0;
+
+ // Sets create engine handler for |engine_id|. |engine_id| must not be empty
+ // and |handler| must not be null.
+ virtual void SetCreateEngineHandler(
+ const std::string& engine_id,
+ const CreateEngineHandler& handler) = 0;
+
+ // Unsets create engine handler for |engine_id|. |engine_id| must not be
+ // empty.
+ virtual void UnsetCreateEngineHandler(const std::string& engine_id) = 0;
+
+ // Creates engine. Do not call this function before SetCreateEngineHandler
+ // call with |engine_id|.
+ virtual void CreateEngine(const std::string& engine_id) = 0;
+
+ protected:
+ IBusBridge();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(IBusBridge);
+};
+
+} // namespace chromeos
+
+#endif // UI_BASE_IME_CHROMEOS_IBUS_BRIDGE_H_