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

Unified Diff: ui/wm/core/input_method_event_filter.cc

Issue 1155013005: Refactoring the ownership of ui::InputMethod. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed bot failure: cast_shell_linux Created 5 years, 6 months 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: ui/wm/core/input_method_event_filter.cc
diff --git a/ui/wm/core/input_method_event_filter.cc b/ui/wm/core/input_method_event_filter.cc
deleted file mode 100644
index e3ea50dc6b222f8a6c2761e6eb7a16967030b6c2..0000000000000000000000000000000000000000
--- a/ui/wm/core/input_method_event_filter.cc
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/wm/core/input_method_event_filter.h"
-
-#include "ui/aura/client/aura_constants.h"
-#include "ui/aura/window_tree_host.h"
-#include "ui/base/ime/input_method.h"
-#include "ui/base/ime/input_method_factory.h"
-#include "ui/base/ime/text_input_client.h"
-#include "ui/events/event.h"
-#include "ui/events/event_processor.h"
-
-namespace wm {
-
-////////////////////////////////////////////////////////////////////////////////
-// InputMethodEventFilter, public:
-
-InputMethodEventFilter::InputMethodEventFilter(gfx::AcceleratedWidget widget)
- : input_method_(ui::CreateInputMethod(this, widget)) {
- // TODO(shuchen): Check if the root window is currently focused and determine
- // whether to call OnFocus.
- input_method_->OnFocus();
-}
-
-InputMethodEventFilter::~InputMethodEventFilter() {
-}
-
-void InputMethodEventFilter::SetInputMethodPropertyInRootWindow(
- aura::Window* root_window) {
- root_window->SetProperty(aura::client::kRootWindowInputMethodKey,
- input_method_.get());
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// InputMethodEventFilter, EventFilter implementation:
-
-void InputMethodEventFilter::OnKeyEvent(ui::KeyEvent* event) {
- // We're processing key events as follows (details are simplified).
- //
- // At the beginning, key events have a ET_KEY_{PRESSED,RELEASED} event type,
- // and they're passed from step 1 through step 3.
- // 1. EventProcessor::OnEventFromSource()
- // 2. InputMethodEventFilter::OnKeyEvent()
- // 3. InputMethod::DispatchKeyEvent()
- // where InputMethod may call DispatchKeyEventPostIME() if IME didn't consume
- // the key event. Otherwise, step 4 through step 6 are skipped and we fall
- // down to step 7 directly.
- // 4. InputMethodEventFilter::DispatchKeyEventPostIME()
- // where the key event is marked as TRANSLATED and the event type becomes
- // ET_TRANSLATED_KEY_{PRESS,RELEASE}. Then, we dispatch the event again from
- // the beginning.
- // 5. EventProcessor::OnEventFromSource() [second time]
- // 6. InputMethodEventFilter::OnKeyEvent() [second time]
- // where we know that the event was already processed once by IME and
- // re-dispatched, we don't pass the event to IME again. Instead we unmark the
- // event as not translated (as same as the original state), and let the event
- // dispatcher continue to dispatch the event to the rest event handlers.
- // 7. EventHandler::OnKeyEvent()
- if (event->IsTranslated()) {
- // The |event| was already processed by IME, so we don't pass the event to
- // IME again. Just let the event dispatcher continue to dispatch the event.
- event->SetTranslated(false);
- } else {
- if (input_method_->DispatchKeyEvent(*event))
- event->StopPropagation();
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// InputMethodEventFilter, ui::InputMethodDelegate implementation:
-
-bool InputMethodEventFilter::DispatchKeyEventPostIME(
- const ui::KeyEvent& event) {
-#if defined(OS_WIN)
- DCHECK(!event.HasNativeEvent() || !event.is_char());
-#endif
- // Since the underlying IME didn't consume the key event, we're going to
- // dispatch the event again from the beginning of the tree of event targets.
- // This time we have to skip dispatching the event to the IME, we mark the
- // event as TRANSLATED so we can distinguish this event as a second time
- // dispatched event.
- // For the target where to dispatch the event, always tries the current
- // focused text input client's attached window. And fallback to the target
- // carried by event.
- aura::Window* target_window = NULL;
- ui::TextInputClient* input = input_method_->GetTextInputClient();
- if (input)
- target_window = input->GetAttachedWindow();
- if (!target_window)
- target_window = static_cast<aura::Window*>(event.target());
- if (!target_window)
- return false;
- ui::EventProcessor* target_dispatcher =
- target_window->GetRootWindow()->GetHost()->event_processor();
- ui::KeyEvent aura_event(event);
- aura_event.SetTranslated(true);
- ui::EventDispatchDetails details =
- target_dispatcher->OnEventFromSource(&aura_event);
- CHECK(!details.dispatcher_destroyed);
- return aura_event.handled();
-}
-
-} // namespace wm

Powered by Google App Engine
This is Rietveld 408576698