Index: chrome/browser/chromeos/input_method/input_method_engine_ibus.h |
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_ibus.h b/chrome/browser/chromeos/input_method/input_method_engine_ibus.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b3de152f4635194c99daa904be71ae7af0d42182 |
--- /dev/null |
+++ b/chrome/browser/chromeos/input_method/input_method_engine_ibus.h |
@@ -0,0 +1,176 @@ |
+// Copyright (c) 2012 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. |
+ |
+#ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_IBUS_H_ |
+#define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_IBUS_H_ |
+ |
+#include <string> |
+#include <vector> |
+#include <map> |
+#include "chrome/browser/chromeos/input_method/input_method_engine.h" |
+#include "chromeos/dbus/ibus/ibus_engine_factory_service.h" |
+#include "chromeos/dbus/ibus/ibus_engine_service.h" |
+#include "dbus/object_path.h" |
+ |
+namespace chromeos { |
+ |
+namespace ibus { |
+class IBusComponent; |
+class IBusLookupTable; |
+class IBusText; |
+} |
+ |
+class IBusEngineService; |
+namespace input_method { |
+struct KeyEventHandle; |
+} // namespace input_method |
+ |
+class InputMethodEngineIBus : public InputMethodEngine, |
+ public IBusEngineHandlerInterface { |
+ public: |
+ InputMethodEngineIBus(); |
+ |
+ virtual ~InputMethodEngineIBus(); |
+ |
+ void Initialize( |
+ InputMethodEngine::Observer* observer, |
+ const char* engine_name, |
+ const char* extension_id, |
+ const char* engine_id, |
+ const char* description, |
+ const char* language, |
+ const std::vector<std::string>& layouts, |
+ std::string* error); |
+ |
+ // InputMethodEngine overrides. |
+ virtual bool SetComposition(int context_id, |
+ const char* text, |
+ int selection_start, |
+ int selection_end, |
+ int cursor, |
+ const std::vector<SegmentInfo>& segments, |
+ std::string* error) OVERRIDE; |
+ virtual bool ClearComposition(int context_id, std::string* error) OVERRIDE; |
+ virtual bool CommitText(int context_id, const char* text, |
+ std::string* error) OVERRIDE; |
+ virtual bool SetCandidateWindowVisible(bool visible, |
+ std::string* error) OVERRIDE; |
+ virtual void SetCandidateWindowCursorVisible(bool visible) OVERRIDE; |
+ virtual void SetCandidateWindowVertical(bool vertical) OVERRIDE; |
+ virtual void SetCandidateWindowPageSize(int size) OVERRIDE; |
+ virtual void SetCandidateWindowAuxText(const char* text) OVERRIDE; |
+ virtual void SetCandidateWindowAuxTextVisible(bool visible) OVERRIDE; |
+ virtual bool SetCandidates(int context_id, |
+ const std::vector<Candidate>& candidates, |
+ std::string* error) OVERRIDE; |
+ virtual bool SetCursorPosition(int context_id, int candidate_id, |
+ std::string* error) OVERRIDE; |
+ virtual bool SetMenuItems(const std::vector<MenuItem>& items) OVERRIDE; |
+ virtual bool UpdateMenuItems(const std::vector<MenuItem>& items) OVERRIDE; |
+ virtual bool IsActive() const OVERRIDE; |
+ virtual void KeyEventDone(input_method::KeyEventHandle* key_data, |
+ bool handled) OVERRIDE; |
+ |
+ // IBusEngineHandlerInterface overrides. |
+ virtual void FocusIn() OVERRIDE; |
+ virtual void FocusOut() OVERRIDE; |
+ virtual void Enable() OVERRIDE; |
+ virtual void Disable() OVERRIDE; |
+ virtual void PropertyActivate(const std::string& property_name, |
+ IBusPropertyState property_state) OVERRIDE; |
+ virtual void PropertyShow(const std::string& property_name) OVERRIDE; |
+ virtual void PropertyHide(const std::string& property_name) OVERRIDE; |
+ virtual void SetCapability(IBusCapability capability) OVERRIDE; |
+ virtual void Reset() OVERRIDE; |
+ virtual void ProcessKeyEvent(uint32 keysym, uint32 keycode, uint32 state, |
+ const KeyEventDoneCallback& callback) OVERRIDE; |
+ virtual void CandidateClicked(uint32 index, IBusMouseButton button, |
+ uint32 state) OVERRIDE; |
+ virtual void SetSurroundingText(const std::string& text, uint32 cursor_pos, |
+ uint32 anchor_pos) OVERRIDE; |
+ |
+ // Called when the connection with ibus-daemon is connected. |
+ void OnConnected(); |
+ |
+ // Called whtn the connection with ibus-daemon is disconnected. |
+ void OnDisconnected(); |
+ |
+ private: |
+ // Returns true if the connection to ibus-daemon is avaiable. |
+ bool IsConnected(); |
+ |
+ // Converts MenuItem to IBusProperty. |
+ bool MenuItemToProperty(const MenuItem& item, ibus::IBusProperty* property); |
+ |
+ // Registers the engine component. |
+ void RegisterComponent(); |
+ |
+ // Called when the RegisterComponent is failed. |
+ void OnComponentRegistrationFailed(); |
+ |
+ // Called when the RegisterComponent is succeeded. |
+ void OnComponentRegistered(); |
+ |
+ // Called when the ibus-daemon sends CreateEngine message with corresponding |
+ // engine id. |
+ void CreateEngineHandler( |
+ const IBusEngineFactoryService::CreateEngineResponseSender& sender); |
+ |
+ // Returns current IBusEngineService, if there is no available service, this |
+ // function returns NULL. |
+ IBusEngineService* GetCurrentService(); |
+ |
+ // True if the current context has focus. |
+ bool focused_; |
+ |
+ // True if this engine is active. |
+ bool active_; |
+ |
+ // ID that is used for the current input context. False if there is no focus. |
+ int context_id_; |
+ |
+ // Next id that will be assigned to a context. |
+ int next_context_id_; |
+ |
+ // This IME ID in Chrome Extension. |
+ std::string engine_id_; |
+ |
+ // This IME ID in ibus. |
+ std::string ibus_id_; |
+ |
+ // The current object path and it's numerical id. |
+ dbus::ObjectPath object_path_; |
+ int current_object_path_; |
+ |
+ // The current auxialy text and it's visiblity. |
+ scoped_ptr<ibus::IBusText> aux_text_; |
+ bool aux_text_visible_; |
+ |
+ // Pointer to the object recieving events for this IME. |
+ InputMethodEngine::Observer* observer_; |
+ |
+ // The current preedit text, and it's cursor position. |
+ scoped_ptr<ibus::IBusText> preedit_text_; |
+ int preedit_cursor_; |
+ |
+ // The current engine component. |
+ scoped_ptr<ibus::IBusComponent> component_; |
+ |
+ // The current lookup table and it's visiblity. |
+ scoped_ptr<ibus::IBusLookupTable> table_; |
+ bool table_visible_; |
+ |
+ // Mapping of candidate index to candidate id. |
+ std::vector<int> candidate_ids_; |
+ |
+ // Mapping of candidate id to index. |
+ std::map<int, int> candidate_indexes_; |
+ |
+ // Used for making callbacks. |
+ base::WeakPtrFactory<InputMethodEngineIBus> weak_ptr_factory_; |
+}; |
+ |
+} // namespace chromeos |
+ |
+#endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_IBUS_H_ |