1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/wm/panels/panel_window_event_handler.h"
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/metrics/user_metrics_recorder.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/shell.h"
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/wm/window_state.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/aura/window.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/aura/window_delegate.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/base/hit_test.h"
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event.h"
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace ash {
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PanelWindowEventHandler::PanelWindowEventHandler() {
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochPanelWindowEventHandler::~PanelWindowEventHandler() {
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid PanelWindowEventHandler::OnMouseEvent(ui::MouseEvent* event) {
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  aura::Window* target = static_cast<aura::Window*>(event->target());
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!event->handled() &&
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      event->type() == ui::ET_MOUSE_PRESSED &&
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      event->flags() & ui::EF_IS_DOUBLE_CLICK &&
283240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      event->IsOnlyLeftMouseButton() &&
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      target->delegate()->GetNonClientComponent(event->location()) ==
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          HTCAPTION) {
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ash::Shell::GetInstance()->metrics()->RecordUserMetricsAction(
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        ash::UMA_PANEL_MINIMIZE_CAPTION_CLICK);
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    wm::GetWindowState(target)->Minimize();
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    event->StopPropagation();
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return;
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid PanelWindowEventHandler::OnGestureEvent(ui::GestureEvent* event) {
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  aura::Window* target = static_cast<aura::Window*>(event->target());
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!event->handled() &&
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      event->type() == ui::ET_GESTURE_TAP &&
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      event->details().tap_count() == 2 &&
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      target->delegate()->GetNonClientComponent(event->location()) ==
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          HTCAPTION) {
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ash::Shell::GetInstance()->metrics()->RecordUserMetricsAction(
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        ash::UMA_PANEL_MINIMIZE_CAPTION_GESTURE);
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    wm::GetWindowState(target)->Minimize();
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    event->StopPropagation();
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return;
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace ash
55