Index: ui/base/ime/mock_input_method.cc |
diff --git a/ui/base/ime/mock_input_method.cc b/ui/base/ime/mock_input_method.cc |
index f98753e6057b9c15a4c97377967bb1a96a64dcac..9aba8d5907c23bc6ccb9cdfd9a4aa25e6167c38c 100644 |
--- a/ui/base/ime/mock_input_method.cc |
+++ b/ui/base/ime/mock_input_method.cc |
@@ -36,8 +36,7 @@ namespace ui { |
MockInputMethod::MockInputMethod(internal::InputMethodDelegate* delegate) |
: delegate_(NULL), |
- text_input_client_(NULL), |
- consume_next_key_(false) { |
+ text_input_client_(NULL) { |
SetDelegate(delegate); |
} |
@@ -57,35 +56,38 @@ TextInputClient* MockInputMethod::GetTextInputClient() const { |
} |
void MockInputMethod::DispatchKeyEvent(const base::NativeEvent& native_event) { |
-#if defined(USE_X11) |
+#if defined(OS_WIN) |
+ if (native_event.message == WM_CHAR) { |
+ if (text_input_client_) { |
+ text_input_client_->InsertChar(ui::KeyboardCodeFromNative(native_event), |
+ ui::EventFlagsFromNative(native_event)); |
+ } |
+ } else { |
+ delegate_->DispatchKeyEventPostIME(native_event); |
+ } |
+#elif defined(USE_X11) |
DCHECK(native_event); |
if (native_event->type == KeyRelease) { |
// On key release, just dispatch it. |
delegate_->DispatchKeyEventPostIME(native_event); |
} else { |
const uint32 state = EventFlagsFromXFlags(native_event->xkey.state); |
- if (consume_next_key_) { |
- // Send the VKEY_PROCESSKEY RawKeyDown event. |
- SendFakeProcessKeyEvent(true, state); |
- } else { |
- // Send a RawKeyDown event first, |
- delegate_->DispatchKeyEventPostIME(native_event); |
- if (text_input_client_) { |
- // then send a Char event via ui::TextInputClient. |
- const KeyboardCode key_code = ui::KeyboardCodeFromNative(native_event); |
- uint16 ch = 0; |
- if (!(state & ui::EF_CONTROL_DOWN)) |
- ch = ui::GetCharacterFromXEvent(native_event); |
- if (!ch) |
- ch = ui::GetCharacterFromKeyCode(key_code, state); |
- if (ch) |
- text_input_client_->InsertChar(ch, state); |
- } |
+ // Send a RawKeyDown event first, |
+ delegate_->DispatchKeyEventPostIME(native_event); |
+ if (text_input_client_) { |
+ // then send a Char event via ui::TextInputClient. |
+ const KeyboardCode key_code = ui::KeyboardCodeFromNative(native_event); |
+ uint16 ch = 0; |
+ if (!(state & ui::EF_CONTROL_DOWN)) |
+ ch = ui::GetCharacterFromXEvent(native_event); |
+ if (!ch) |
+ ch = ui::GetCharacterFromKeyCode(key_code, state); |
+ if (ch) |
+ text_input_client_->InsertChar(ch, state); |
} |
} |
- consume_next_key_ = false; |
#else |
- // TODO(yusukes): Support Windows. |
+ // TODO(yusukes): Support other platforms. Call InsertChar() when necessary. |
delegate_->DispatchKeyEventPostIME(native_event); |
#endif |
} |
@@ -113,13 +115,4 @@ ui::TextInputType MockInputMethod::GetTextInputType() const { |
return ui::TEXT_INPUT_TYPE_NONE; |
} |
-void MockInputMethod::ConsumeNextKey() { |
- consume_next_key_ = true; |
-} |
- |
-void MockInputMethod::SendFakeProcessKeyEvent(bool pressed, int flags) const { |
- delegate_->DispatchFabricatedKeyEventPostIME( |
- pressed ? ET_KEY_PRESSED : ET_KEY_RELEASED, VKEY_PROCESSKEY, flags); |
-} |
- |
} // namespace ui |