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

Side by Side Diff: ui/base/ime/input_method_auralinux.cc

Issue 108143003: Rename input_method_linux_x11 as input_method_auralinux. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename LinuxAura as AuraLinux Created 7 years 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "ui/base/ime/input_method_linux_x11.h" 5 #include "ui/base/ime/input_method_auralinux.h"
6 6
7 #include "base/environment.h" 7 #include "base/environment.h"
8 #include "ui/base/ime/linux/linux_input_method_context_factory.h" 8 #include "ui/base/ime/linux/linux_input_method_context_factory.h"
9 #include "ui/base/ime/text_input_client.h" 9 #include "ui/base/ime/text_input_client.h"
10 #include "ui/events/event.h" 10 #include "ui/events/event.h"
11 11
12 namespace ui { 12 namespace ui {
13 13
14 InputMethodLinuxX11::InputMethodLinuxX11( 14 InputMethodAuraLinux::InputMethodAuraLinux(
15 internal::InputMethodDelegate* delegate) { 15 internal::InputMethodDelegate* delegate) {
16 SetDelegate(delegate); 16 SetDelegate(delegate);
17 } 17 }
18 18
19 InputMethodLinuxX11::~InputMethodLinuxX11() {} 19 InputMethodAuraLinux::~InputMethodAuraLinux() {}
20 20
21 // static 21 // static
22 void InputMethodLinuxX11::Initialize() { 22 void InputMethodAuraLinux::Initialize() {
23 #if (USE_X11)
23 // Force a IBus IM context to run in synchronous mode. 24 // Force a IBus IM context to run in synchronous mode.
24 // 25 //
25 // Background: IBus IM context runs by default in asynchronous mode. In 26 // Background: IBus IM context runs by default in asynchronous mode. In
26 // this mode, gtk_im_context_filter_keypress() consumes all the key events 27 // this mode, gtk_im_context_filter_keypress() consumes all the key events
27 // and returns true while asynchronously sending the event to an underlying 28 // and returns true while asynchronously sending the event to an underlying
28 // IME implementation. When the event has not actually been consumed by 29 // IME implementation. When the event has not actually been consumed by
29 // the underlying IME implementation, the context pushes the event back to 30 // the underlying IME implementation, the context pushes the event back to
30 // the GDK event queue marking the event as already handled by the IBus IM 31 // the GDK event queue marking the event as already handled by the IBus IM
31 // context. 32 // context.
32 // 33 //
33 // The problem here is that those pushed-back GDK events are never handled 34 // The problem here is that those pushed-back GDK events are never handled
34 // when base::MessagePumpX11 is used, which only handles X events. So, we 35 // when base::MessagePumpX11 is used, which only handles X events. So, we
35 // make a IBus IM context run in synchronous mode by setting an environment 36 // make a IBus IM context run in synchronous mode by setting an environment
36 // variable. This is only the interface to change the mode. 37 // variable. This is only the interface to change the mode.
37 // 38 //
38 // Another possible solution is to use GDK event loop instead of X event 39 // Another possible solution is to use GDK event loop instead of X event
39 // loop. 40 // loop.
40 // 41 //
41 // Since there is no reentrant version of setenv(3C), it's a caller's duty 42 // Since there is no reentrant version of setenv(3C), it's a caller's duty
42 // to avoid race conditions. This function should be called in the main 43 // to avoid race conditions. This function should be called in the main
43 // thread on a very early stage, and supposed to be called from 44 // thread on a very early stage, and supposed to be called from
44 // ui::InitializeInputMethod(). 45 // ui::InitializeInputMethod().
45 scoped_ptr<base::Environment> env(base::Environment::Create()); 46 scoped_ptr<base::Environment> env(base::Environment::Create());
46 env->SetVar("IBUS_ENABLE_SYNC_MODE", "1"); 47 env->SetVar("IBUS_ENABLE_SYNC_MODE", "1");
48 #endif
47 } 49 }
48 50
49 // Overriden from InputMethod. 51 // Overriden from InputMethod.
50 52
51 void InputMethodLinuxX11::Init(bool focused) { 53 void InputMethodAuraLinux::Init(bool focused) {
52 CHECK(LinuxInputMethodContextFactory::instance()); 54 CHECK(LinuxInputMethodContextFactory::instance());
53 input_method_context_ = 55 input_method_context_ =
54 LinuxInputMethodContextFactory::instance()->CreateInputMethodContext( 56 LinuxInputMethodContextFactory::instance()->CreateInputMethodContext(
55 this); 57 this);
56 CHECK(input_method_context_.get()); 58 CHECK(input_method_context_.get());
57 59
58 InputMethodBase::Init(focused); 60 InputMethodBase::Init(focused);
59 61
60 if (focused) { 62 if (focused) {
61 input_method_context_->OnTextInputTypeChanged( 63 input_method_context_->OnTextInputTypeChanged(
62 GetTextInputClient() ? 64 GetTextInputClient() ?
63 GetTextInputClient()->GetTextInputType() : 65 GetTextInputClient()->GetTextInputType() :
64 TEXT_INPUT_TYPE_TEXT); 66 TEXT_INPUT_TYPE_TEXT);
65 } 67 }
66 } 68 }
67 69
68 bool InputMethodLinuxX11::OnUntranslatedIMEMessage( 70 bool InputMethodAuraLinux::OnUntranslatedIMEMessage(
69 const base::NativeEvent& event, 71 const base::NativeEvent& event,
70 NativeEventResult* result) { 72 NativeEventResult* result) {
71 return false; 73 return false;
72 } 74 }
73 75
74 bool InputMethodLinuxX11::DispatchKeyEvent(const ui::KeyEvent& event) { 76 bool InputMethodAuraLinux::DispatchKeyEvent(const ui::KeyEvent& event) {
75 DCHECK(event.type() == ET_KEY_PRESSED || event.type() == ET_KEY_RELEASED); 77 DCHECK(event.type() == ET_KEY_PRESSED || event.type() == ET_KEY_RELEASED);
76 DCHECK(system_toplevel_window_focused()); 78 DCHECK(system_toplevel_window_focused());
77 79
78 // If no text input client, do nothing. 80 // If no text input client, do nothing.
79 if (!GetTextInputClient()) 81 if (!GetTextInputClient())
80 return DispatchKeyEventPostIME(event); 82 return DispatchKeyEventPostIME(event);
81 83
82 // Let an IME handle the key event first. 84 // Let an IME handle the key event first.
83 if (input_method_context_->DispatchKeyEvent(event)) { 85 if (input_method_context_->DispatchKeyEvent(event)) {
84 if (event.type() == ET_KEY_PRESSED) { 86 if (event.type() == ET_KEY_PRESSED) {
(...skipping 11 matching lines...) Expand all
96 if (event.type() == ET_KEY_PRESSED && GetTextInputClient()) { 98 if (event.type() == ET_KEY_PRESSED && GetTextInputClient()) {
97 const uint16 ch = event.GetCharacter(); 99 const uint16 ch = event.GetCharacter();
98 if (ch) { 100 if (ch) {
99 GetTextInputClient()->InsertChar(ch, event.flags()); 101 GetTextInputClient()->InsertChar(ch, event.flags());
100 return true; 102 return true;
101 } 103 }
102 } 104 }
103 return handled; 105 return handled;
104 } 106 }
105 107
106 void InputMethodLinuxX11::OnTextInputTypeChanged( 108 void InputMethodAuraLinux::OnTextInputTypeChanged(
107 const TextInputClient* client) { 109 const TextInputClient* client) {
108 if (!IsTextInputClientFocused(client)) 110 if (!IsTextInputClientFocused(client))
109 return; 111 return;
110 input_method_context_->Reset(); 112 input_method_context_->Reset();
111 // TODO(yoichio): Support inputmode HTML attribute. 113 // TODO(yoichio): Support inputmode HTML attribute.
112 input_method_context_->OnTextInputTypeChanged(client->GetTextInputType()); 114 input_method_context_->OnTextInputTypeChanged(client->GetTextInputType());
113 } 115 }
114 116
115 void InputMethodLinuxX11::OnCaretBoundsChanged(const TextInputClient* client) { 117 void InputMethodAuraLinux::OnCaretBoundsChanged(const TextInputClient* client) {
116 if (!IsTextInputClientFocused(client)) 118 if (!IsTextInputClientFocused(client))
117 return; 119 return;
118 input_method_context_->OnCaretBoundsChanged( 120 input_method_context_->OnCaretBoundsChanged(
119 GetTextInputClient()->GetCaretBounds()); 121 GetTextInputClient()->GetCaretBounds());
120 } 122 }
121 123
122 void InputMethodLinuxX11::CancelComposition(const TextInputClient* client) { 124 void InputMethodAuraLinux::CancelComposition(const TextInputClient* client) {
123 if (!IsTextInputClientFocused(client)) 125 if (!IsTextInputClientFocused(client))
124 return; 126 return;
125 input_method_context_->Reset(); 127 input_method_context_->Reset();
126 input_method_context_->OnTextInputTypeChanged(client->GetTextInputType()); 128 input_method_context_->OnTextInputTypeChanged(client->GetTextInputType());
127 } 129 }
128 130
129 void InputMethodLinuxX11::OnInputLocaleChanged() { 131 void InputMethodAuraLinux::OnInputLocaleChanged() {
130 } 132 }
131 133
132 std::string InputMethodLinuxX11::GetInputLocale() { 134 std::string InputMethodAuraLinux::GetInputLocale() {
133 return ""; 135 return "";
134 } 136 }
135 137
136 base::i18n::TextDirection InputMethodLinuxX11::GetInputTextDirection() { 138 base::i18n::TextDirection InputMethodAuraLinux::GetInputTextDirection() {
137 return input_method_context_->GetInputTextDirection(); 139 return input_method_context_->GetInputTextDirection();
138 } 140 }
139 141
140 bool InputMethodLinuxX11::IsActive() { 142 bool InputMethodAuraLinux::IsActive() {
141 // InputMethodLinuxX11 is always ready and up. 143 // InputMethodAuraLinux is always ready and up.
142 return true; 144 return true;
143 } 145 }
144 146
145 bool InputMethodLinuxX11::IsCandidatePopupOpen() const { 147 bool InputMethodAuraLinux::IsCandidatePopupOpen() const {
146 // There seems no way to detect candidate windows or any popups. 148 // There seems no way to detect candidate windows or any popups.
147 return false; 149 return false;
148 } 150 }
149 151
150 // Overriden from ui::LinuxInputMethodContextDelegate 152 // Overriden from ui::LinuxInputMethodContextDelegate
151 153
152 void InputMethodLinuxX11::OnCommit(const base::string16& text) { 154 void InputMethodAuraLinux::OnCommit(const base::string16& text) {
153 TextInputClient* text_input_client = GetTextInputClient(); 155 TextInputClient* text_input_client = GetTextInputClient();
154 if (text_input_client) 156 if (text_input_client)
155 text_input_client->InsertText(text); 157 text_input_client->InsertText(text);
156 } 158 }
157 159
158 void InputMethodLinuxX11::OnPreeditChanged( 160 void InputMethodAuraLinux::OnPreeditChanged(
159 const CompositionText& composition_text) { 161 const CompositionText& composition_text) {
160 TextInputClient* text_input_client = GetTextInputClient(); 162 TextInputClient* text_input_client = GetTextInputClient();
161 if (text_input_client) 163 if (text_input_client)
162 text_input_client->SetCompositionText(composition_text); 164 text_input_client->SetCompositionText(composition_text);
163 } 165 }
164 166
165 void InputMethodLinuxX11::OnPreeditEnd() { 167 void InputMethodAuraLinux::OnPreeditEnd() {
166 TextInputClient* text_input_client = GetTextInputClient(); 168 TextInputClient* text_input_client = GetTextInputClient();
167 if (text_input_client && text_input_client->HasCompositionText()) 169 if (text_input_client && text_input_client->HasCompositionText())
168 text_input_client->ClearCompositionText(); 170 text_input_client->ClearCompositionText();
169 } 171 }
170 172
171 void InputMethodLinuxX11::OnPreeditStart() {} 173 void InputMethodAuraLinux::OnPreeditStart() {}
172 174
173 // Overridden from InputMethodBase. 175 // Overridden from InputMethodBase.
174 176
175 void InputMethodLinuxX11::OnDidChangeFocusedClient( 177 void InputMethodAuraLinux::OnDidChangeFocusedClient(
176 TextInputClient* focused_before, 178 TextInputClient* focused_before,
177 TextInputClient* focused) { 179 TextInputClient* focused) {
178 input_method_context_->Reset(); 180 input_method_context_->Reset();
179 input_method_context_->OnTextInputTypeChanged( 181 input_method_context_->OnTextInputTypeChanged(
180 focused ? focused->GetTextInputType() : TEXT_INPUT_TYPE_NONE); 182 focused ? focused->GetTextInputType() : TEXT_INPUT_TYPE_NONE);
181 183
182 InputMethodBase::OnDidChangeFocusedClient(focused_before, focused); 184 InputMethodBase::OnDidChangeFocusedClient(focused_before, focused);
183 } 185 }
184 186
185 } // namespace ui 187 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698