Chromium Code Reviews| Index: ui/base/ime/input_method_win.cc |
| =================================================================== |
| --- ui/base/ime/input_method_win.cc (revision 193425) |
| +++ ui/base/ime/input_method_win.cc (working copy) |
| @@ -8,12 +8,14 @@ |
| #include "base/debug/stack_trace.h" |
| #include "base/logging.h" |
| #include "base/string_util.h" |
| +#include "base/win/metro.h" |
| #include "ui/base/events/event.h" |
| #include "ui/base/events/event_constants.h" |
| #include "ui/base/events/event_utils.h" |
| #include "ui/base/ime/composition_text.h" |
| #include "ui/base/ime/input_method.h" |
| #include "ui/base/ime/text_input_client.h" |
| +#include "ui/base/ime/win/tsf_bridge.h" |
| #include "ui/base/keycodes/keyboard_codes.h" |
| #include "ui/base/win/hwnd_util.h" |
| @@ -106,6 +108,12 @@ |
| } |
| void InputMethodWin::OnTextInputTypeChanged(const TextInputClient* client) { |
| + if (base::win::IsTSFAwareRequired()) { |
| + UpdateIMEState(); |
| + ui::TSFBridge::GetInstance()->OnTextInputTypeChanged( |
| + const_cast<TextInputClient*>(client)); |
| + return; |
|
cpu_(ooo_6.6-7.5)
2013/04/11 19:54:12
this seems very important to do. If the full CL is
|
| + } |
| if (IsTextInputClientFocused(client)) { |
| ime_input_.CancelIME(hwnd_); |
| UpdateIMEState(); |
| @@ -116,7 +124,6 @@ |
| void InputMethodWin::OnCaretBoundsChanged(const TextInputClient* client) { |
| if (!enabled_ || !IsTextInputClientFocused(client)) |
| return; |
| - |
| // The current text input type should not be NONE if |client| is focused. |
| DCHECK(!IsTextInputTypeNone()); |
| gfx::Rect screen_bounds(GetTextInputClient()->GetCaretBounds()); |
| @@ -149,10 +156,38 @@ |
| return active_; |
| } |
| +void InputMethodWin::SetFocusedTextInputClient(TextInputClient* client) { |
| + if (base::win::IsTSFAwareRequired()) { |
| + if (client) { |
| + ui::TSFBridge::GetInstance()->SetFocusedClient(hwnd_, client); |
| + } else { |
| + ui::TSFBridge::GetInstance()->RemoveFocusedClient( |
| + ui::TSFBridge::GetInstance()->GetFocusedTextInputClient()); |
| + return; |
| + } |
| + } |
| + InputMethodBase::SetFocusedTextInputClient(client); |
| +} |
| + |
| +TextInputClient* InputMethodWin::GetTextInputClient() const { |
| + if (base::win::IsTSFAwareRequired()) |
| + return ui::TSFBridge::GetInstance()->GetFocusedTextInputClient(); |
| + return InputMethodBase::GetTextInputClient(); |
| +} |
| + |
| LRESULT InputMethodWin::OnImeMessages(UINT message, |
| WPARAM w_param, |
| LPARAM l_param, |
| BOOL* handled) { |
| + // Don't do traditional IME in Text services mode. |
| + if (base::win::IsTSFAwareRequired() && |
| + message != WM_CHAR && |
| + message != WM_SYSCHAR && |
| + message != WM_DEADCHAR && |
| + message != WM_SYSDEADCHAR && |
| + message != WM_IME_SETCONTEXT) { |
| + return false; |
| + } |
| LRESULT result = 0; |
| switch (message) { |
| case WM_IME_SETCONTEXT: |