| Index: ui/views/corewm/compound_event_filter.cc
|
| diff --git a/ui/views/corewm/compound_event_filter.cc b/ui/views/corewm/compound_event_filter.cc
|
| deleted file mode 100644
|
| index 0e5609fe0d6bcdf47c5367961eb2bb7ee81721a8..0000000000000000000000000000000000000000
|
| --- a/ui/views/corewm/compound_event_filter.cc
|
| +++ /dev/null
|
| @@ -1,298 +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/views/corewm/compound_event_filter.h"
|
| -
|
| -#include "base/containers/hash_tables.h"
|
| -#include "base/logging.h"
|
| -#include "ui/aura/client/activation_client.h"
|
| -#include "ui/aura/client/cursor_client.h"
|
| -#include "ui/aura/client/drag_drop_client.h"
|
| -#include "ui/aura/env.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/aura/window_delegate.h"
|
| -#include "ui/aura/window_event_dispatcher.h"
|
| -#include "ui/aura/window_tracker.h"
|
| -#include "ui/base/hit_test.h"
|
| -#include "ui/events/event.h"
|
| -
|
| -#if defined(OS_CHROMEOS) && defined(USE_X11)
|
| -#include "ui/events/x/touch_factory_x11.h"
|
| -#endif
|
| -
|
| -namespace views {
|
| -namespace corewm {
|
| -
|
| -namespace {
|
| -
|
| -bool ShouldHideCursorOnKeyEvent(const ui::KeyEvent& event) {
|
| -#if defined(OS_CHROMEOS)
|
| - // All alt and control key commands are ignored.
|
| - if (event.IsAltDown() || event.IsControlDown())
|
| - return false;
|
| -
|
| - static bool inited = false;
|
| - static base::hash_set<int32> ignored_keys;
|
| - if (!inited) {
|
| - // Modifiers.
|
| - ignored_keys.insert(ui::VKEY_SHIFT);
|
| - ignored_keys.insert(ui::VKEY_CONTROL);
|
| - ignored_keys.insert(ui::VKEY_MENU);
|
| -
|
| - // Search key == VKEY_LWIN.
|
| - ignored_keys.insert(ui::VKEY_LWIN);
|
| -
|
| - // Function keys.
|
| - for (int key = ui::VKEY_F1; key <= ui::VKEY_F24; ++key)
|
| - ignored_keys.insert(key);
|
| -
|
| - // Media keys.
|
| - for (int key = ui::VKEY_BROWSER_BACK; key <= ui::VKEY_MEDIA_LAUNCH_APP2;
|
| - ++key) {
|
| - ignored_keys.insert(key);
|
| - }
|
| -
|
| -#if defined(OS_POSIX)
|
| - ignored_keys.insert(ui::VKEY_WLAN);
|
| - ignored_keys.insert(ui::VKEY_POWER);
|
| - ignored_keys.insert(ui::VKEY_BRIGHTNESS_DOWN);
|
| - ignored_keys.insert(ui::VKEY_BRIGHTNESS_UP);
|
| - ignored_keys.insert(ui::VKEY_KBD_BRIGHTNESS_DOWN);
|
| - ignored_keys.insert(ui::VKEY_KBD_BRIGHTNESS_UP);
|
| -#endif
|
| -
|
| - inited = true;
|
| - }
|
| -
|
| - if (ignored_keys.count(event.key_code()) > 0)
|
| - return false;
|
| -
|
| - return true;
|
| -#else // !defined(OS_CHROMEOS)
|
| - return false;
|
| -#endif // defined(OS_CHROMEOS)
|
| -}
|
| -
|
| -// Returns true if the cursor should be hidden on touch events.
|
| -bool ShouldHideCursorOnTouch(const ui::TouchEvent& event) {
|
| -#if defined(OS_CHROMEOS)
|
| -#if defined(USE_X11)
|
| - int device_id = event.source_device_id();
|
| - if (device_id >= 0 &&
|
| - !ui::TouchFactory::GetInstance()->IsMultiTouchDevice(device_id)) {
|
| - // If the touch event is coming from a mouse-device (i.e. not a real
|
| - // touch-device), then do not hide the cursor.
|
| - return false;
|
| - }
|
| -#endif // defined(USE_X11)
|
| - return true;
|
| -#else
|
| - // Windows hides the cursor on touch, but we cannot track the cursor
|
| - // visibility or enabledness state reliably until we are able to
|
| - // properly flag all incoming mouse messages in HWNDMessageHandler.
|
| - // TODO(ananta|tdanderson): crbug.com/332430
|
| - return false;
|
| -#endif
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// CompoundEventFilter, public:
|
| -
|
| -CompoundEventFilter::CompoundEventFilter() {
|
| -}
|
| -
|
| -CompoundEventFilter::~CompoundEventFilter() {
|
| - // Additional filters are not owned by CompoundEventFilter and they
|
| - // should all be removed when running here. |handlers_| has
|
| - // check_empty == true and will DCHECK failure if it is not empty.
|
| -}
|
| -
|
| -// static
|
| -gfx::NativeCursor CompoundEventFilter::CursorForWindowComponent(
|
| - int window_component) {
|
| - switch (window_component) {
|
| - case HTBOTTOM:
|
| - return ui::kCursorSouthResize;
|
| - case HTBOTTOMLEFT:
|
| - return ui::kCursorSouthWestResize;
|
| - case HTBOTTOMRIGHT:
|
| - return ui::kCursorSouthEastResize;
|
| - case HTLEFT:
|
| - return ui::kCursorWestResize;
|
| - case HTRIGHT:
|
| - return ui::kCursorEastResize;
|
| - case HTTOP:
|
| - return ui::kCursorNorthResize;
|
| - case HTTOPLEFT:
|
| - return ui::kCursorNorthWestResize;
|
| - case HTTOPRIGHT:
|
| - return ui::kCursorNorthEastResize;
|
| - default:
|
| - return ui::kCursorNull;
|
| - }
|
| -}
|
| -
|
| -void CompoundEventFilter::AddHandler(ui::EventHandler* handler) {
|
| - handlers_.AddObserver(handler);
|
| -}
|
| -
|
| -void CompoundEventFilter::RemoveHandler(ui::EventHandler* handler) {
|
| - handlers_.RemoveObserver(handler);
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// CompoundEventFilter, private:
|
| -
|
| -void CompoundEventFilter::UpdateCursor(aura::Window* target,
|
| - ui::MouseEvent* event) {
|
| - // If drag and drop is in progress, let the drag drop client set the cursor
|
| - // instead of setting the cursor here.
|
| - aura::Window* root_window = target->GetRootWindow();
|
| - aura::client::DragDropClient* drag_drop_client =
|
| - aura::client::GetDragDropClient(root_window);
|
| - if (drag_drop_client && drag_drop_client->IsDragDropInProgress())
|
| - return;
|
| -
|
| - aura::client::CursorClient* cursor_client =
|
| - aura::client::GetCursorClient(root_window);
|
| - if (cursor_client) {
|
| - gfx::NativeCursor cursor = target->GetCursor(event->location());
|
| - if ((event->flags() & ui::EF_IS_NON_CLIENT)) {
|
| - if (target->delegate()) {
|
| - int window_component =
|
| - target->delegate()->GetNonClientComponent(event->location());
|
| - cursor = CursorForWindowComponent(window_component);
|
| - } else {
|
| - // Allow the OS to handle non client cursors if we don't have a
|
| - // a delegate to handle the non client hittest.
|
| - return;
|
| - }
|
| - }
|
| - cursor_client->SetCursor(cursor);
|
| - }
|
| -}
|
| -
|
| -void CompoundEventFilter::FilterKeyEvent(ui::KeyEvent* event) {
|
| - if (handlers_.might_have_observers()) {
|
| - ObserverListBase<ui::EventHandler>::Iterator it(handlers_);
|
| - ui::EventHandler* handler;
|
| - while (!event->stopped_propagation() && (handler = it.GetNext()) != NULL)
|
| - handler->OnKeyEvent(event);
|
| - }
|
| -}
|
| -
|
| -void CompoundEventFilter::FilterMouseEvent(ui::MouseEvent* event) {
|
| - if (handlers_.might_have_observers()) {
|
| - ObserverListBase<ui::EventHandler>::Iterator it(handlers_);
|
| - ui::EventHandler* handler;
|
| - while (!event->stopped_propagation() && (handler = it.GetNext()) != NULL)
|
| - handler->OnMouseEvent(event);
|
| - }
|
| -}
|
| -
|
| -void CompoundEventFilter::FilterTouchEvent(ui::TouchEvent* event) {
|
| - if (handlers_.might_have_observers()) {
|
| - ObserverListBase<ui::EventHandler>::Iterator it(handlers_);
|
| - ui::EventHandler* handler;
|
| - while (!event->stopped_propagation() && (handler = it.GetNext()) != NULL)
|
| - handler->OnTouchEvent(event);
|
| - }
|
| -}
|
| -
|
| -void CompoundEventFilter::SetCursorVisibilityOnEvent(aura::Window* target,
|
| - ui::Event* event,
|
| - bool show) {
|
| - if (event->flags() & ui::EF_IS_SYNTHESIZED)
|
| - return;
|
| -
|
| - aura::client::CursorClient* client =
|
| - aura::client::GetCursorClient(target->GetRootWindow());
|
| - if (!client)
|
| - return;
|
| -
|
| - if (show)
|
| - client->ShowCursor();
|
| - else
|
| - client->HideCursor();
|
| -}
|
| -
|
| -void CompoundEventFilter::SetMouseEventsEnableStateOnEvent(aura::Window* target,
|
| - ui::Event* event,
|
| - bool enable) {
|
| - if (event->flags() & ui::EF_IS_SYNTHESIZED)
|
| - return;
|
| - aura::client::CursorClient* client =
|
| - aura::client::GetCursorClient(target->GetRootWindow());
|
| - if (!client)
|
| - return;
|
| -
|
| - if (enable)
|
| - client->EnableMouseEvents();
|
| - else
|
| - client->DisableMouseEvents();
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// CompoundEventFilter, ui::EventHandler implementation:
|
| -
|
| -void CompoundEventFilter::OnKeyEvent(ui::KeyEvent* event) {
|
| - if (ShouldHideCursorOnKeyEvent(*event)) {
|
| - SetCursorVisibilityOnEvent(
|
| - static_cast<aura::Window*>(event->target()), event, false);
|
| - }
|
| -
|
| - FilterKeyEvent(event);
|
| -}
|
| -
|
| -void CompoundEventFilter::OnMouseEvent(ui::MouseEvent* event) {
|
| - aura::Window* window = static_cast<aura::Window*>(event->target());
|
| - aura::WindowTracker window_tracker;
|
| - window_tracker.Add(window);
|
| -
|
| - // We must always update the cursor, otherwise the cursor can get stuck if an
|
| - // event filter registered with us consumes the event.
|
| - // It should also update the cursor for clicking and wheels for ChromeOS boot.
|
| - // When ChromeOS is booted, it hides the mouse cursor but immediate mouse
|
| - // operation will show the cursor.
|
| - // We also update the cursor for mouse enter in case a mouse cursor is sent to
|
| - // outside of the root window and moved back for some reasons (e.g. running on
|
| - // on Desktop for testing, or a bug in pointer barrier).
|
| - if (event->type() == ui::ET_MOUSE_ENTERED ||
|
| - event->type() == ui::ET_MOUSE_MOVED ||
|
| - event->type() == ui::ET_MOUSE_PRESSED ||
|
| - event->type() == ui::ET_MOUSEWHEEL) {
|
| - SetMouseEventsEnableStateOnEvent(window, event, true);
|
| - SetCursorVisibilityOnEvent(window, event, true);
|
| - UpdateCursor(window, event);
|
| - }
|
| -
|
| - FilterMouseEvent(event);
|
| -}
|
| -
|
| -void CompoundEventFilter::OnScrollEvent(ui::ScrollEvent* event) {
|
| -}
|
| -
|
| -void CompoundEventFilter::OnTouchEvent(ui::TouchEvent* event) {
|
| - FilterTouchEvent(event);
|
| - if (!event->handled() && event->type() == ui::ET_TOUCH_PRESSED &&
|
| - ShouldHideCursorOnTouch(*event) &&
|
| - !aura::Env::GetInstance()->IsMouseButtonDown()) {
|
| - SetMouseEventsEnableStateOnEvent(
|
| - static_cast<aura::Window*>(event->target()), event, false);
|
| - }
|
| -}
|
| -
|
| -void CompoundEventFilter::OnGestureEvent(ui::GestureEvent* event) {
|
| - if (handlers_.might_have_observers()) {
|
| - ObserverListBase<ui::EventHandler>::Iterator it(handlers_);
|
| - ui::EventHandler* handler;
|
| - while (!event->stopped_propagation() && (handler = it.GetNext()) != NULL)
|
| - handler->OnGestureEvent(event);
|
| - }
|
| -}
|
| -
|
| -} // namespace corewm
|
| -} // namespace views
|
|
|