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 21 namespace ash { 22 23 SystemGestureEventFilter::SystemGestureEventFilter() 24 : long_press_affordance_(new LongPressAffordanceHandler), 25 overview_gesture_handler_(new OverviewGestureHandler), 26 shelf_gesture_handler_(new ShelfGestureHandler()) { 27 } 28 29 SystemGestureEventFilter::~SystemGestureEventFilter() { 30 } 31 32 void 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 42 void SystemGestureEventFilter::OnScrollEvent(ui::ScrollEvent* event) { 43 if (overview_gesture_handler_ && 44 overview_gesture_handler_->ProcessScrollEvent(*event)) { 45 event->StopPropagation(); 46 } 47 } 48 49 void SystemGestureEventFilter::OnTouchEvent(ui::TouchEvent* event) { 50 aura::Window* target = static_cast<aura::Window*>(event->target()); 51 ash::TouchUMA::GetInstance()->RecordTouchEvent(target, *event); 52 } 53 54 void 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