blob: 03328694050cfcf995c57ad65859b1ea8faff597 [file] [log] [blame]
Torne (Richard Coles)58218062012-11-14 11:43:16 +00001// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ash/wm/system_gesture_event_filter.h"
6
Torne (Richard Coles)58218062012-11-14 11:43:16 +00007#include "ash/ash_switches.h"
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +00008#include "ash/metrics/user_metrics_recorder.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +00009#include "ash/shell.h"
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000010#include "ash/touch/touch_uma.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000011#include "ash/wm/gestures/long_press_affordance_handler.h"
Torne (Richard Coles)4e180b62013-10-18 15:46:22 +010012#include "ash/wm/gestures/overview_gesture_handler.h"
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +000013#include "ash/wm/gestures/shelf_gesture_handler.h"
Torne (Richard Coles)d0247b12013-09-19 22:36:51 +010014#include "ui/events/event.h"
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +000015#include "ui/events/event_constants.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000016
Ben Murdochc5cede92014-04-10 11:22:14 +010017#if defined(OS_CHROMEOS) && defined(USE_X11)
Torne (Richard Coles)68043e12013-09-26 13:24:57 +010018#include "ui/events/x/touch_factory_x11.h"
Torne (Richard Coles)58218062012-11-14 11:43:16 +000019#endif
20
Torne (Richard Coles)58218062012-11-14 11:43:16 +000021namespace ash {
Torne (Richard Coles)58218062012-11-14 11:43:16 +000022
23SystemGestureEventFilter::SystemGestureEventFilter()
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000024 : long_press_affordance_(new LongPressAffordanceHandler),
25 overview_gesture_handler_(new OverviewGestureHandler),
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +000026 shelf_gesture_handler_(new ShelfGestureHandler()) {
Torne (Richard Coles)58218062012-11-14 11:43:16 +000027}
28
29SystemGestureEventFilter::~SystemGestureEventFilter() {
30}
31
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000032void SystemGestureEventFilter::OnMouseEvent(ui::MouseEvent* event) {
Ben Murdochc5cede92014-04-10 11:22:14 +010033#if defined(OS_CHROMEOS) && defined(USE_X11)
Torne (Richard Coles)58218062012-11-14 11:43:16 +000034 if (event->type() == ui::ET_MOUSE_PRESSED && event->native_event() &&
35 ui::TouchFactory::GetInstance()->IsTouchDevicePresent() &&
36 Shell::GetInstance()->delegate()) {
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +000037 Shell::GetInstance()->metrics()->RecordUserMetricsAction(UMA_MOUSE_DOWN);
Torne (Richard Coles)58218062012-11-14 11:43:16 +000038 }
39#endif
Torne (Richard Coles)58218062012-11-14 11:43:16 +000040}
41
Torne (Richard Coles)0f1bc082013-11-06 12:27:47 +000042void SystemGestureEventFilter::OnScrollEvent(ui::ScrollEvent* event) {
43 if (overview_gesture_handler_ &&
44 overview_gesture_handler_->ProcessScrollEvent(*event)) {
45 event->StopPropagation();
Torne (Richard Coles)0f1bc082013-11-06 12:27:47 +000046 }
47}
48
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000049void SystemGestureEventFilter::OnTouchEvent(ui::TouchEvent* event) {
50 aura::Window* target = static_cast<aura::Window*>(event->target());
Ben Murdocheb525c52013-07-10 11:40:50 +010051 ash::TouchUMA::GetInstance()->RecordTouchEvent(target, *event);
Torne (Richard Coles)58218062012-11-14 11:43:16 +000052}
53
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000054void SystemGestureEventFilter::OnGestureEvent(ui::GestureEvent* event) {
55 aura::Window* target = static_cast<aura::Window*>(event->target());
Ben Murdocheb525c52013-07-10 11:40:50 +010056 ash::TouchUMA::GetInstance()->RecordGestureEvent(target, *event);
Torne (Richard Coles)f2477e02013-11-28 11:55:43 +000057 long_press_affordance_->ProcessEvent(target, event);
Torne (Richard Coles)58218062012-11-14 11:43:16 +000058
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +000059 if (overview_gesture_handler_ &&
60 overview_gesture_handler_->ProcessGestureEvent(*event)) {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000061 event->StopPropagation();
62 return;
63 }
Torne (Richard Coles)58218062012-11-14 11:43:16 +000064
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +000065 if (event->type() == ui::ET_GESTURE_WIN8_EDGE_SWIPE &&
66 shelf_gesture_handler_->ProcessGestureEvent(*event)) {
Ben Murdocha02191e2014-04-16 11:17:03 +010067 // Do not stop propagation, since the immersive fullscreen controller may
68 // need to handle this event.
69 return;
Torne (Richard Coles)58218062012-11-14 11:43:16 +000070 }
Torne (Richard Coles)58218062012-11-14 11:43:16 +000071}
72
Torne (Richard Coles)58218062012-11-14 11:43:16 +000073} // namespace ash