1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
// 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 <map>
#include <string>
#include <vector>
#include "base/memory/weak_ptr.h"
#include "chrome/browser/chromeos/input_method/input_method_engine.h"
#include "ui/base/ime/chromeos/ibus_bridge.h"
namespace chromeos {
class IBusText;
namespace input_method {
class CandidateWindow;
struct InputMethodProperty;
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 std::vector<std::string>& languages,
const std::vector<std::string>& layouts,
const GURL& options_page,
const GURL& input_view,
std::string* error);
// InputMethodEngine overrides.
virtual void StartIme() OVERRIDE;
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 const CandidateWindowProperty&
GetCandidateWindowProperty() const OVERRIDE;
virtual void SetCandidateWindowProperty(
const CandidateWindowProperty& property) OVERRIDE;
virtual bool SetCandidateWindowVisible(bool visible,
std::string* error) 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;
virtual bool DeleteSurroundingText(int context_id,
int offset,
size_t number_of_chars,
std::string* error) OVERRIDE;
// IBusEngineHandlerInterface overrides.
virtual void FocusIn(ibus::TextInputType text_input_type) OVERRIDE;
virtual void FocusOut() OVERRIDE;
virtual void Enable() OVERRIDE;
virtual void Disable() OVERRIDE;
virtual void PropertyActivate(const std::string& property_name) 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, ibus::IBusMouseButton button,
uint32 state) OVERRIDE;
virtual void SetSurroundingText(const std::string& text, uint32 cursor_pos,
uint32 anchor_pos) OVERRIDE;
private:
// Converts MenuItem to InputMethodProperty.
void MenuItemToProperty(const MenuItem& item,
input_method::InputMethodProperty* property);
// Registers the engine component.
void RegisterComponent();
// Called when the IBusBrige executes CreateEngine with
// corresponding engine id.
void CreateEngineHandler();
// 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 auxialy text and it's visiblity.
scoped_ptr<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<IBusText> preedit_text_;
int preedit_cursor_;
// The current candidate window.
scoped_ptr<input_method::CandidateWindow> candidate_window_;
// The current candidate window property.
CandidateWindowProperty candidate_window_property_;
// Indicates whether the candidate window is visible.
bool window_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_
|