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

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

Issue 17112021: New method: InputMethod::IsCandidatePopupOpen() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Renamed from IsPopupOpen() to IsCandidatePopupOpen(). Created 7 years, 6 months 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_tsf.h ('k') | ui/base/ime/mock_input_method.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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_tsf.h" 5 #include "ui/base/ime/input_method_tsf.h"
6 6
7 #include "ui/base/ime/text_input_client.h" 7 #include "ui/base/ime/text_input_client.h"
8 #include "ui/base/ime/win/tsf_bridge.h" 8 #include "ui/base/ime/win/tsf_bridge.h"
9 9
10 namespace ui { 10 namespace ui {
11 11
12 InputMethodTSF::InputMethodTSF(internal::InputMethodDelegate* delegate, 12 InputMethodTSF::InputMethodTSF(internal::InputMethodDelegate* delegate,
13 HWND toplevel_window_handle) 13 HWND toplevel_window_handle)
14 : InputMethodWin(delegate, toplevel_window_handle) { 14 : InputMethodWin(delegate, toplevel_window_handle),
15 is_candidate_popup_open_(false) {
15 // In non-Aura environment, appropriate callbacks to OnFocus() and OnBlur() 16 // In non-Aura environment, appropriate callbacks to OnFocus() and OnBlur()
16 // are not implemented yet. To work around this limitation, here we use 17 // are not implemented yet. To work around this limitation, here we use
17 // "always focused" model. 18 // "always focused" model.
18 // TODO(ime): Fix the caller of OnFocus() and OnBlur() so that appropriate 19 // TODO(ime): Fix the caller of OnFocus() and OnBlur() so that appropriate
19 // focus event will be passed. 20 // focus event will be passed.
20 InputMethodWin::OnFocus(); 21 InputMethodWin::OnFocus();
21 } 22 }
22 23
23 void InputMethodTSF::OnFocus() { 24 void InputMethodTSF::OnFocus() {
24 // Ignore OnFocus event for "always focused" model. See the comment in the 25 // Ignore OnFocus event for "always focused" model. See the comment in the
(...skipping 29 matching lines...) Expand all
54 // - Another application sends WM_CHAR through SendMessage API. 55 // - Another application sends WM_CHAR through SendMessage API.
55 original_result = OnChar( 56 original_result = OnChar(
56 event.message, event.wParam, event.lParam, &handled); 57 event.message, event.wParam, event.lParam, &handled);
57 break; 58 break;
58 case WM_DEADCHAR: 59 case WM_DEADCHAR:
59 case WM_SYSDEADCHAR: 60 case WM_SYSDEADCHAR:
60 // See the comment in WM_CHAR/WM_SYSCHAR. 61 // See the comment in WM_CHAR/WM_SYSCHAR.
61 original_result = OnDeadChar( 62 original_result = OnDeadChar(
62 event.message, event.wParam, event.lParam, &handled); 63 event.message, event.wParam, event.lParam, &handled);
63 break; 64 break;
65 case WM_IME_NOTIFY:
Yohei Yukawa 2013/06/21 06:45:47 Wait. Please do not handle WM_IME_NOTIFY when TSF
66 original_result = OnImeNotify(
67 event.message, event.wParam, event.lParam, &handled);
68 break;
64 } 69 }
65 if (result) 70 if (result)
66 *result = original_result; 71 *result = original_result;
67 return !!handled; 72 return !!handled;
68 } 73 }
69 74
70 void InputMethodTSF::OnTextInputTypeChanged(const TextInputClient* client) { 75 void InputMethodTSF::OnTextInputTypeChanged(const TextInputClient* client) {
71 if (IsTextInputClientFocused(client) && IsWindowFocused(client)) { 76 if (IsTextInputClientFocused(client) && IsWindowFocused(client)) {
72 ui::TSFBridge::GetInstance()->CancelComposition(); 77 ui::TSFBridge::GetInstance()->CancelComposition();
73 ui::TSFBridge::GetInstance()->OnTextInputTypeChanged(client); 78 ui::TSFBridge::GetInstance()->OnTextInputTypeChanged(client);
(...skipping 12 matching lines...) Expand all
86 } 91 }
87 92
88 void InputMethodTSF::SetFocusedTextInputClient(TextInputClient* client) { 93 void InputMethodTSF::SetFocusedTextInputClient(TextInputClient* client) {
89 if (IsWindowFocused(client)) { 94 if (IsWindowFocused(client)) {
90 ui::TSFBridge::GetInstance()->SetFocusedClient( 95 ui::TSFBridge::GetInstance()->SetFocusedClient(
91 GetAttachedWindowHandle(client), client); 96 GetAttachedWindowHandle(client), client);
92 } 97 }
93 InputMethodWin::SetFocusedTextInputClient(client); 98 InputMethodWin::SetFocusedTextInputClient(client);
94 } 99 }
95 100
101 bool InputMethodTSF::IsCandidatePopupOpen() const {
102 return is_candidate_popup_open_;
103 }
104
96 void InputMethodTSF::OnWillChangeFocusedClient(TextInputClient* focused_before, 105 void InputMethodTSF::OnWillChangeFocusedClient(TextInputClient* focused_before,
97 TextInputClient* focused) { 106 TextInputClient* focused) {
98 if (IsWindowFocused(focused_before)) { 107 if (IsWindowFocused(focused_before)) {
99 ConfirmCompositionText(); 108 ConfirmCompositionText();
100 ui::TSFBridge::GetInstance()->RemoveFocusedClient(focused_before); 109 ui::TSFBridge::GetInstance()->RemoveFocusedClient(focused_before);
101 } 110 }
102 } 111 }
103 112
104 void InputMethodTSF::OnDidChangeFocusedClient(TextInputClient* focused_before, 113 void InputMethodTSF::OnDidChangeFocusedClient(TextInputClient* focused_before,
105 TextInputClient* focused) { 114 TextInputClient* focused) {
106 if (IsWindowFocused(focused)) { 115 if (IsWindowFocused(focused)) {
107 ui::TSFBridge::GetInstance()->SetFocusedClient( 116 ui::TSFBridge::GetInstance()->SetFocusedClient(
108 GetAttachedWindowHandle(focused), focused); 117 GetAttachedWindowHandle(focused), focused);
109 // Force to update the input type since client's TextInputStateChanged() 118 // Force to update the input type since client's TextInputStateChanged()
110 // function might not be called if text input types before the client loses 119 // function might not be called if text input types before the client loses
111 // focus and after it acquires focus again are the same. 120 // focus and after it acquires focus again are the same.
112 OnTextInputTypeChanged(focused); 121 OnTextInputTypeChanged(focused);
113 122
114 // Force to update caret bounds, in case the client thinks that the caret 123 // Force to update caret bounds, in case the client thinks that the caret
115 // bounds has not changed. 124 // bounds has not changed.
116 OnCaretBoundsChanged(focused); 125 OnCaretBoundsChanged(focused);
117 } 126 }
118 } 127 }
119 128
129 LRESULT InputMethodTSF::OnImeNotify(UINT message,
130 WPARAM wparam,
131 LPARAM lparam,
132 BOOL* handled) {
133 *handled = FALSE;
134
135 // Update |is_candidate_popup_open_|, whether a candidate window is open.
136 switch (wparam) {
137 case IMN_OPENCANDIDATE:
138 is_candidate_popup_open_ = true;
139 break;
140 case IMN_CLOSECANDIDATE:
141 is_candidate_popup_open_ = false;
142 break;
143 }
144
145 return 0;
146 }
147
120 void InputMethodTSF::ConfirmCompositionText() { 148 void InputMethodTSF::ConfirmCompositionText() {
121 if (!IsTextInputTypeNone()) { 149 if (!IsTextInputTypeNone()) {
122 // TSFBridge has not implemented ConfirmComposition yet. So here cancel 150 // TSFBridge has not implemented ConfirmComposition yet. So here cancel
123 // the composition instead as a workaround. 151 // the composition instead as a workaround.
124 // TODO(ime): Implement ConfirmComposition for TSF. 152 // TODO(ime): Implement ConfirmComposition for TSF.
125 ui::TSFBridge::GetInstance()->CancelComposition(); 153 ui::TSFBridge::GetInstance()->CancelComposition();
126 } 154 }
127 } 155 }
128 156
129 bool InputMethodTSF::IsWindowFocused(const TextInputClient* client) const { 157 bool InputMethodTSF::IsWindowFocused(const TextInputClient* client) const {
130 if (!client) 158 if (!client)
131 return false; 159 return false;
132 HWND attached_window_handle = GetAttachedWindowHandle(client); 160 HWND attached_window_handle = GetAttachedWindowHandle(client);
133 return attached_window_handle && GetFocus() == attached_window_handle; 161 return attached_window_handle && GetFocus() == attached_window_handle;
134 } 162 }
135 163
136 } // namespace ui 164 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/ime/input_method_tsf.h ('k') | ui/base/ime/mock_input_method.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698