Index: ui/aura/window_event_dispatcher.cc |
diff --git a/ui/aura/window_event_dispatcher.cc b/ui/aura/window_event_dispatcher.cc |
index 589529ea6c0889e70fdec7f5694377455cf2d70a..857469d394b085665a5b283413b4281fc5f90499 100644 |
--- a/ui/aura/window_event_dispatcher.cc |
+++ b/ui/aura/window_event_dispatcher.cc |
@@ -25,6 +25,7 @@ |
#include "ui/aura/window_tracker.h" |
#include "ui/aura/window_tree_host.h" |
#include "ui/base/hit_test.h" |
+#include "ui/base/ime/input_method.h" |
#include "ui/compositor/dip_util.h" |
#include "ui/events/event.h" |
#include "ui/events/event_utils.h" |
@@ -519,6 +520,8 @@ ui::EventDispatchDetails WindowEventDispatcher::PreDispatchEvent( |
details = PreDispatchLocatedEvent(target_window, event->AsScrollEvent()); |
} else if (event->IsTouchEvent()) { |
details = PreDispatchTouchEvent(target_window, event->AsTouchEvent()); |
+ } else if (event->IsKeyEvent()) { |
+ details = PreDispatchKeyEvent(event->AsKeyEvent()); |
} |
if (details.dispatcher_destroyed || details.target_destroyed) |
return details; |
@@ -929,4 +932,14 @@ DispatchDetails WindowEventDispatcher::PreDispatchTouchEvent( |
return PreDispatchLocatedEvent(target, event); |
} |
+ui::EventDispatchDetails WindowEventDispatcher::PreDispatchKeyEvent( |
+ ui::KeyEvent* event) { |
+ if (skip_ime_ || !host_->has_input_method() || |
+ (event->flags() & ui::EF_IS_SYNTHESIZED)) |
+ return ui::EventDispatchDetails(); |
+ host_->GetInputMethod()->DispatchKeyEvent(event); |
+ event->StopPropagation(); |
+ return ui::EventDispatchDetails(); |
+} |
+ |
} // namespace aura |