From e61449d257bd231d718afe97a19a686feac2219d Mon Sep 17 00:00:00 2001 From: "ananta@chromium.org" Date: Sat, 8 Dec 2012 00:44:49 +0000 Subject: [PATCH] Ensure that keyboard input works in Windows 8 Metro Ash This regressed with the recent InputMethod changes. Fix is to implement the InputMethodWin::DispatchFabricatedKeyEvent function to handle characters and keyboard events. Removed the corresponding implementation from the MockInputMethod class. BUG=151718 R=sky Review URL: https://codereview.chromium.org/11474031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171901 0039d316-1c4b-4281-b951-d872f2087c98 --- ui/base/ime/input_method_win.cc | 17 +++++++++++++++++ ui/base/ime/input_method_win.h | 2 +- ui/base/ime/mock_input_method.cc | 15 --------------- ui/base/ime/mock_input_method.h | 3 ++- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/ui/base/ime/input_method_win.cc b/ui/base/ime/input_method_win.cc index 3e6474e596dce0..0bdc831725154f 100644 --- a/ui/base/ime/input_method_win.cc +++ b/ui/base/ime/input_method_win.cc @@ -87,6 +87,23 @@ void InputMethodWin::DispatchKeyEvent( DispatchKeyEventPostIME(native_key_event); } +void InputMethodWin::DispatchFabricatedKeyEvent(const ui::KeyEvent& event) { + // TODO(ananta) + // Support IMEs and RTL layout in Windows 8 metro Ash. The code below won't + // work with IMEs. + // Bug: https://code.google.com/p/chromium/issues/detail?id=164964 + if (event.is_char()) { + if (GetTextInputClient()) { + GetTextInputClient()->InsertChar(event.key_code(), + ui::GetModifiersFromKeyState()); + return; + } + } + DispatchFabricatedKeyEventPostIME(event.type(), + event.key_code(), + event.flags()); +} + void InputMethodWin::OnTextInputTypeChanged(const TextInputClient* client) { if (IsTextInputClientFocused(client)) { ime_input_.CancelIME(hwnd_); diff --git a/ui/base/ime/input_method_win.h b/ui/base/ime/input_method_win.h index 414b49013d6d8a..f89f7ee92cb317 100644 --- a/ui/base/ime/input_method_win.h +++ b/ui/base/ime/input_method_win.h @@ -28,7 +28,7 @@ class UI_EXPORT InputMethodWin : public InputMethodBase { virtual void OnBlur() OVERRIDE; virtual void DispatchKeyEvent( const base::NativeEvent& native_key_event) OVERRIDE; - virtual void DispatchFabricatedKeyEvent(const ui::KeyEvent& event) OVERRIDE {} + virtual void DispatchFabricatedKeyEvent(const ui::KeyEvent& event) OVERRIDE; virtual void OnTextInputTypeChanged(const TextInputClient* client) OVERRIDE; virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE; virtual void CancelComposition(const TextInputClient* client) OVERRIDE; diff --git a/ui/base/ime/mock_input_method.cc b/ui/base/ime/mock_input_method.cc index 21c3dd4d5e37f4..62cd8474b90e81 100644 --- a/ui/base/ime/mock_input_method.cc +++ b/ui/base/ime/mock_input_method.cc @@ -94,21 +94,6 @@ void MockInputMethod::DispatchKeyEvent(const base::NativeEvent& native_event) { #endif } -void MockInputMethod::DispatchFabricatedKeyEvent(const ui::KeyEvent& event) { -#if defined(OS_WIN) - if (event.is_char()) { - if (GetTextInputClient()) { - GetTextInputClient()->InsertChar(event.key_code(), - ui::GetModifiersFromKeyState()); - return; - } - } - delegate_->DispatchFabricatedKeyEventPostIME(event.type(), - event.key_code(), - event.flags()); -#endif -} - void MockInputMethod::Init(bool focused) {} void MockInputMethod::OnFocus() {} void MockInputMethod::OnBlur() {} diff --git a/ui/base/ime/mock_input_method.h b/ui/base/ime/mock_input_method.h index abfe55f36700a1..d9085b18d100f8 100644 --- a/ui/base/ime/mock_input_method.h +++ b/ui/base/ime/mock_input_method.h @@ -31,7 +31,8 @@ class UI_EXPORT MockInputMethod : NON_EXPORTED_BASE(public InputMethod) { virtual void SetFocusedTextInputClient(TextInputClient* client) OVERRIDE; virtual TextInputClient* GetTextInputClient() const OVERRIDE; virtual void DispatchKeyEvent(const base::NativeEvent& native_event) OVERRIDE; - virtual void DispatchFabricatedKeyEvent(const ui::KeyEvent& event) OVERRIDE; + virtual void DispatchFabricatedKeyEvent(const ui::KeyEvent& event) OVERRIDE { + } virtual void OnTextInputTypeChanged(const TextInputClient* client) OVERRIDE; virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE; virtual void CancelComposition(const TextInputClient* client) OVERRIDE;