Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(606)

Unified Diff: extensions/shell/browser/shell_desktop_controller_aura.cc

Issue 2580733002: AppShell: Create input method and handle key events (Closed)
Patch Set: nits Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 70b19aa28ea8f7345fb814a311375cdfcfae4aa5..31201d71fcea89dedc1b23dd730fac65d5632d2f 100644
--- a/extensions/shell/browser/shell_desktop_controller_aura.cc
+++ b/extensions/shell/browser/shell_desktop_controller_aura.cc
@@ -16,6 +16,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"
@@ -24,13 +25,13 @@
#include "ui/aura/client/default_capture_client.h"
#include "ui/aura/layout_manager.h"
#include "ui/aura/window.h"
-#include "ui/aura/window_event_dispatcher.h"
#include "ui/aura/window_tree_host.h"
#include "ui/base/cursor/cursor.h"
#include "ui/base/cursor/image_cursors.h"
-#include "ui/base/ime/input_method_initializer.h"
+#include "ui/base/ime/input_method.h"
#include "ui/base/user_activity/user_activity_detector.h"
#include "ui/display/screen.h"
+#include "ui/events/event_processor.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/wm/core/base_focus_rules.h"
@@ -271,6 +272,23 @@ void ShellDesktopControllerAura::OnHostCloseRequested(
FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
}
+ui::EventDispatchDetails ShellDesktopControllerAura::DispatchKeyEventPostIME(
+ ui::KeyEvent* 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_processor()->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() {
wm::FocusController* focus_controller =
new wm::FocusController(new AppsFocusRules());
@@ -318,12 +336,18 @@ void ShellDesktopControllerAura::CreateRootWindow() {
screen_.reset(new ShellScreen(size));
display::Screen::SetScreenInstance(screen_.get());
- // TODO(mukai): Set up input method.
host_.reset(screen_->CreateHostForPrimaryDisplay());
aura::client::SetWindowParentingClient(host_->window(), this);
root_window_event_filter_.reset(new wm::CompoundEventFilter);
host_->window()->AddPreTargetHandler(root_window_event_filter_.get());
+
+ // 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();
host_->AddObserver(this);
@@ -340,7 +364,13 @@ void ShellDesktopControllerAura::DestroyRootWindow() {
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();
+
capture_client_.reset();
focus_client_.reset();
cursor_manager_.reset();
@@ -349,6 +379,7 @@ void ShellDesktopControllerAura::DestroyRootWindow() {
#endif
user_activity_detector_.reset();
host_.reset();
+ display::Screen::SetScreenInstance(nullptr);
screen_.reset();
}

Powered by Google App Engine
This is Rietveld 408576698