| Index: extensions/shell/browser/shell_desktop_controller_aura.cc
|
| diff --git a/extensions/shell/browser/shell_desktop_controller_aura.cc b/extensions/shell/browser/shell_desktop_controller_aura.cc
|
| index ffcb51178e7977e3a073f6e6c647064e6c6914cd..2ac6389b2e54d5a33f68f88dc663728142dd2139 100644
|
| --- a/extensions/shell/browser/shell_desktop_controller_aura.cc
|
| +++ b/extensions/shell/browser/shell_desktop_controller_aura.cc
|
| @@ -18,6 +18,7 @@
|
| #include "build/build_config.h"
|
| #include "extensions/browser/app_window/app_window.h"
|
| #include "extensions/browser/app_window/native_app_window.h"
|
| +#include "extensions/shell/browser/input_method_event_handler.h"
|
| #include "extensions/shell/browser/shell_app_delegate.h"
|
| #include "extensions/shell/browser/shell_app_window_client.h"
|
| #include "extensions/shell/browser/shell_screen.h"
|
| @@ -274,7 +275,19 @@
|
|
|
| ui::EventDispatchDetails ShellDesktopControllerAura::DispatchKeyEventPostIME(
|
| ui::KeyEvent* key_event) {
|
| - return host_->DispatchKeyEventPostIME(key_event);
|
| + // The input method has processed this event, so prevent the handler from
|
| + // dispatching it again.
|
| + input_method_event_handler_->set_post_ime(true);
|
| +
|
| + // Send the event on to the host.
|
| + ui::EventDispatchDetails details =
|
| + host_->event_sink()->OnEventFromSource(key_event);
|
| +
|
| + // Clear the handler's PostIME flag for the next event.
|
| + if (!details.dispatcher_destroyed)
|
| + input_method_event_handler_->set_post_ime(false);
|
| +
|
| + return details;
|
| }
|
|
|
| void ShellDesktopControllerAura::InitWindowManager() {
|
| @@ -333,6 +346,8 @@
|
| // Trigger creation of an input method and become its delegate.
|
| ui::InputMethod* input_method = host_->GetInputMethod();
|
| input_method->SetDelegate(this);
|
| + input_method_event_handler_.reset(new InputMethodEventHandler(input_method));
|
| + host_->window()->AddPreTargetHandler(input_method_event_handler_.get());
|
|
|
| InitWindowManager();
|
|
|
| @@ -350,6 +365,9 @@
|
| host_->window()->RemovePreTargetHandler(focus_controller);
|
| aura::client::SetActivationClient(host_->window(), NULL);
|
| }
|
| +
|
| + host_->window()->RemovePreTargetHandler(input_method_event_handler_.get());
|
| + input_method_event_handler_.reset();
|
|
|
| host_->window()->RemovePreTargetHandler(root_window_event_filter_.get());
|
| root_window_event_filter_.reset();
|
|
|