1// 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 7#include "ash/ash_switches.h" 8#include "ash/metrics/user_metrics_recorder.h" 9#include "ash/shell.h" 10#include "ash/touch/touch_uma.h" 11#include "ash/wm/gestures/long_press_affordance_handler.h" 12#include "ash/wm/gestures/overview_gesture_handler.h" 13#include "ash/wm/gestures/shelf_gesture_handler.h" 14#include "ui/events/event.h" 15#include "ui/events/event_constants.h" 16 17#if defined(OS_CHROMEOS) && defined(USE_X11) 18#include "ui/events/x/touch_factory_x11.h" 19#endif 20 21namespace ash { 22 23SystemGestureEventFilter::SystemGestureEventFilter() 24 : long_press_affordance_(new LongPressAffordanceHandler), 25 overview_gesture_handler_(new OverviewGestureHandler), 26 shelf_gesture_handler_(new ShelfGestureHandler()) { 27} 28 29SystemGestureEventFilter::~SystemGestureEventFilter() { 30} 31 32void SystemGestureEventFilter::OnMouseEvent(ui::MouseEvent* event) { 33#if defined(OS_CHROMEOS) && defined(USE_X11) 34 if (event->type() == ui::ET_MOUSE_PRESSED && event->native_event() && 35 ui::TouchFactory::GetInstance()->IsTouchDevicePresent() && 36 Shell::GetInstance()->delegate()) { 37 Shell::GetInstance()->metrics()->RecordUserMetricsAction(UMA_MOUSE_DOWN); 38 } 39#endif 40} 41 42void SystemGestureEventFilter::OnScrollEvent(ui::ScrollEvent* event) { 43 if (overview_gesture_handler_ && 44 overview_gesture_handler_->ProcessScrollEvent(*event)) { 45 event->StopPropagation(); 46 } 47} 48 49void SystemGestureEventFilter::OnTouchEvent(ui::TouchEvent* event) { 50 aura::Window* target = static_cast<aura::Window*>(event->target()); 51 ash::TouchUMA::GetInstance()->RecordTouchEvent(target, *event); 52} 53 54void SystemGestureEventFilter::OnGestureEvent(ui::GestureEvent* event) { 55 aura::Window* target = static_cast<aura::Window*>(event->target()); 56 ash::TouchUMA::GetInstance()->RecordGestureEvent(target, *event); 57 long_press_affordance_->ProcessEvent(target, event); 58 59 if (overview_gesture_handler_ && 60 overview_gesture_handler_->ProcessGestureEvent(*event)) { 61 event->StopPropagation(); 62 return; 63 } 64 65 if (event->type() == ui::ET_GESTURE_WIN8_EDGE_SWIPE && 66 shelf_gesture_handler_->ProcessGestureEvent(*event)) { 67 // Do not stop propagation, since the immersive fullscreen controller may 68 // need to handle this event. 69 return; 70 } 71} 72 73} // namespace ash 74