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 |