Index: ui/base/ime/fake_input_method.cc |
diff --git a/ui/base/ime/fake_input_method.cc b/ui/base/ime/fake_input_method.cc |
index 322130fe4d68dd1a0bb0e94d2d66dc10c6e39518..dd2d9aea67d04e96d37697050e30c7e73e1ace7c 100644 |
--- a/ui/base/ime/fake_input_method.cc |
+++ b/ui/base/ime/fake_input_method.cc |
@@ -67,7 +67,11 @@ TextInputClient* FakeInputMethod::GetTextInputClient() const { |
return text_input_client_; |
} |
-bool FakeInputMethod::DispatchKeyEvent(const base::NativeEvent& native_event) { |
+bool FakeInputMethod::DispatchKeyEvent(const ui::KeyEvent& event) { |
+ if (!event.HasNativeEvent()) |
+ return DispatchFabricatedKeyEvent(event); |
+ |
+ const base::NativeEvent& native_event = event.native_event(); |
bool handled = false; |
#if defined(OS_WIN) |
if (native_event.message == WM_CHAR) { |
@@ -83,11 +87,11 @@ bool FakeInputMethod::DispatchKeyEvent(const base::NativeEvent& native_event) { |
DCHECK(native_event); |
if (native_event->type == KeyRelease) { |
// On key release, just dispatch it. |
- handled = delegate_->DispatchKeyEventPostIME(native_event); |
+ handled = delegate_->DispatchKeyEventPostIME(event); |
} else { |
const uint32 state = EventFlagsFromXFlags(native_event->xkey.state); |
// Send a RawKeyDown event first, |
- handled = delegate_->DispatchKeyEventPostIME(native_event); |
+ handled = delegate_->DispatchKeyEventPostIME(event); |
if (text_input_client_) { |
// then send a Char event via ui::TextInputClient. |
const KeyboardCode key_code = ui::KeyboardCodeFromNative(native_event); |