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

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

Issue 665903003: Magnifier needs to follow the focus of the textfield. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address code review comments. Created 6 years, 1 month 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
« no previous file with comments | « ui/base/ime/input_method_chromeos.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_chromeos.h" 5 #include "ui/base/ime/input_method_chromeos.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 keyboard->SetCapsLockEnabled(caps); 116 keyboard->SetCapsLockEnabled(caps);
117 } 117 }
118 } 118 }
119 } 119 }
120 120
121 // If |context_| is not usable, then we can only dispatch the key event as is. 121 // If |context_| is not usable, then we can only dispatch the key event as is.
122 // We only dispatch the key event to input method when the |context_| is an 122 // We only dispatch the key event to input method when the |context_| is an
123 // normal input field (not a password field). 123 // normal input field (not a password field).
124 // Note: We need to send the key event to ibus even if the |context_| is not 124 // Note: We need to send the key event to ibus even if the |context_| is not
125 // enabled, so that ibus can have a chance to enable the |context_|. 125 // enabled, so that ibus can have a chance to enable the |context_|.
126 if (!IsInputFieldFocused() || !GetEngine()) { 126 if (!IsNonPasswordInputFieldFocused() || !GetEngine()) {
127 if (event.type() == ET_KEY_PRESSED) { 127 if (event.type() == ET_KEY_PRESSED) {
128 if (ExecuteCharacterComposer(event)) { 128 if (ExecuteCharacterComposer(event)) {
129 // Treating as PostIME event if character composer handles key event and 129 // Treating as PostIME event if character composer handles key event and
130 // generates some IME event, 130 // generates some IME event,
131 ProcessKeyEventPostIME(event, true); 131 ProcessKeyEventPostIME(event, true);
132 return true; 132 return true;
133 } 133 }
134 ProcessUnfilteredKeyPressEvent(event); 134 ProcessUnfilteredKeyPressEvent(event);
135 } else { 135 } else {
136 DispatchKeyEventPostIME(event); 136 DispatchKeyEventPostIME(event);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 engine->FocusIn(context); 171 engine->FocusIn(context);
172 } 172 }
173 173
174 InputMethodBase::OnTextInputTypeChanged(client); 174 InputMethodBase::OnTextInputTypeChanged(client);
175 } 175 }
176 176
177 void InputMethodChromeOS::OnCaretBoundsChanged(const TextInputClient* client) { 177 void InputMethodChromeOS::OnCaretBoundsChanged(const TextInputClient* client) {
178 if (!IsInputFieldFocused() || !IsTextInputClientFocused(client)) 178 if (!IsInputFieldFocused() || !IsTextInputClientFocused(client))
179 return; 179 return;
180 180
181 NotifyTextInputCaretBoundsChanged(client);
182
183 if (!IsNonPasswordInputFieldFocused())
184 return;
185
181 // The current text input type should not be NONE if |context_| is focused. 186 // The current text input type should not be NONE if |context_| is focused.
182 DCHECK(!IsTextInputTypeNone()); 187 DCHECK(!IsTextInputTypeNone());
183 const gfx::Rect rect = GetTextInputClient()->GetCaretBounds(); 188 const gfx::Rect rect = GetTextInputClient()->GetCaretBounds();
184 189
185 gfx::Rect composition_head; 190 gfx::Rect composition_head;
186 if (!GetTextInputClient()->GetCompositionCharacterBounds(0, 191 if (!GetTextInputClient()->GetCompositionCharacterBounds(0,
187 &composition_head)) { 192 &composition_head)) {
188 composition_head = rect; 193 composition_head = rect;
189 } 194 }
190 195
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 // we have to convert |selection_range| from node coordinates to 228 // we have to convert |selection_range| from node coordinates to
224 // |surrounding_text| coordinates. 229 // |surrounding_text| coordinates.
225 if (!GetEngine()) 230 if (!GetEngine())
226 return; 231 return;
227 GetEngine()->SetSurroundingText(base::UTF16ToUTF8(surrounding_text), 232 GetEngine()->SetSurroundingText(base::UTF16ToUTF8(surrounding_text),
228 selection_range.start() - text_range.start(), 233 selection_range.start() - text_range.start(),
229 selection_range.end() - text_range.start()); 234 selection_range.end() - text_range.start());
230 } 235 }
231 236
232 void InputMethodChromeOS::CancelComposition(const TextInputClient* client) { 237 void InputMethodChromeOS::CancelComposition(const TextInputClient* client) {
233 if (IsInputFieldFocused() && IsTextInputClientFocused(client)) 238 if (IsNonPasswordInputFieldFocused() && IsTextInputClientFocused(client))
234 ResetContext(); 239 ResetContext();
235 } 240 }
236 241
237 void InputMethodChromeOS::OnInputLocaleChanged() { 242 void InputMethodChromeOS::OnInputLocaleChanged() {
238 // Not supported. 243 // Not supported.
239 } 244 }
240 245
241 std::string InputMethodChromeOS::GetInputLocale() { 246 std::string InputMethodChromeOS::GetInputLocale() {
242 // Not supported. 247 // Not supported.
243 return ""; 248 return "";
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 283
279 void InputMethodChromeOS::ConfirmCompositionText() { 284 void InputMethodChromeOS::ConfirmCompositionText() {
280 TextInputClient* client = GetTextInputClient(); 285 TextInputClient* client = GetTextInputClient();
281 if (client && client->HasCompositionText()) 286 if (client && client->HasCompositionText())
282 client->ConfirmCompositionText(); 287 client->ConfirmCompositionText();
283 288
284 ResetContext(); 289 ResetContext();
285 } 290 }
286 291
287 void InputMethodChromeOS::ResetContext() { 292 void InputMethodChromeOS::ResetContext() {
288 if (!IsInputFieldFocused() || !GetTextInputClient()) 293 if (!IsNonPasswordInputFieldFocused() || !GetTextInputClient())
289 return; 294 return;
290 295
291 DCHECK(system_toplevel_window_focused()); 296 DCHECK(system_toplevel_window_focused());
292 297
293 composition_.Clear(); 298 composition_.Clear();
294 result_text_.clear(); 299 result_text_.clear();
295 composing_text_ = false; 300 composing_text_ = false;
296 composition_changed_ = false; 301 composition_changed_ = false;
297 302
298 // We need to abandon all pending key events, but as above comment says, there 303 // We need to abandon all pending key events, but as above comment says, there
(...skipping 13 matching lines...) Expand all
312 317
313 void InputMethodChromeOS::UpdateContextFocusState() { 318 void InputMethodChromeOS::UpdateContextFocusState() {
314 ResetContext(); 319 ResetContext();
315 OnInputMethodChanged(); 320 OnInputMethodChanged();
316 321
317 // Propagate the focus event to the candidate window handler which also 322 // Propagate the focus event to the candidate window handler which also
318 // manages the input method mode indicator. 323 // manages the input method mode indicator.
319 chromeos::IMECandidateWindowHandlerInterface* candidate_window = 324 chromeos::IMECandidateWindowHandlerInterface* candidate_window =
320 chromeos::IMEBridge::Get()->GetCandidateWindowHandler(); 325 chromeos::IMEBridge::Get()->GetCandidateWindowHandler();
321 if (candidate_window) 326 if (candidate_window)
322 candidate_window->FocusStateChanged(IsInputFieldFocused()); 327 candidate_window->FocusStateChanged(IsNonPasswordInputFieldFocused());
323 328
324 chromeos::IMEBridge::Get()->SetCurrentTextInputType(GetTextInputType()); 329 chromeos::IMEBridge::Get()->SetCurrentTextInputType(GetTextInputType());
325 330
326 if (!IsTextInputTypeNone()) 331 if (!IsTextInputTypeNone())
327 OnCaretBoundsChanged(GetTextInputClient()); 332 OnCaretBoundsChanged(GetTextInputClient());
328 } 333 }
329 334
330 void InputMethodChromeOS::ProcessKeyEventPostIME( 335 void InputMethodChromeOS::ProcessKeyEventPostIME(
331 const ui::KeyEvent& event, 336 const ui::KeyEvent& event,
332 bool handled) { 337 bool handled) {
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 } 652 }
648 } 653 }
649 654
650 // Use a black thin underline by default. 655 // Use a black thin underline by default.
651 if (out_composition->underlines.empty()) { 656 if (out_composition->underlines.empty()) {
652 out_composition->underlines.push_back(CompositionUnderline( 657 out_composition->underlines.push_back(CompositionUnderline(
653 0, length, SK_ColorBLACK, false /* thick */, SK_ColorTRANSPARENT)); 658 0, length, SK_ColorBLACK, false /* thick */, SK_ColorTRANSPARENT));
654 } 659 }
655 } 660 }
656 661
657 bool InputMethodChromeOS::IsInputFieldFocused() { 662 bool InputMethodChromeOS::IsNonPasswordInputFieldFocused() {
658 TextInputType type = GetTextInputType(); 663 TextInputType type = GetTextInputType();
659 return (type != TEXT_INPUT_TYPE_NONE) && (type != TEXT_INPUT_TYPE_PASSWORD); 664 return (type != TEXT_INPUT_TYPE_NONE) && (type != TEXT_INPUT_TYPE_PASSWORD);
660 } 665 }
661 666
667 bool InputMethodChromeOS::IsInputFieldFocused() {
668 return GetTextInputType() != TEXT_INPUT_TYPE_NONE;
669 }
670
662 } // namespace ui 671 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/ime/input_method_chromeos.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698