1// Copyright 2013 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/shelf/shelf_window_watcher_item_delegate.h"
6
7#include "ash/shelf/shelf_model.h"
8#include "ash/shelf/shelf_util.h"
9#include "ash/shell.h"
10#include "ash/shell_delegate.h"
11#include "ash/wm/window_state.h"
12#include "ui/aura/window.h"
13#include "ui/views/widget/widget.h"
14#include "ui/wm/core/window_animations.h"
15
16namespace ash {
17
18ShelfWindowWatcherItemDelegate::ShelfWindowWatcherItemDelegate(
19    aura::Window* window, ShelfModel* model)
20    : window_(window),
21      model_(model) {
22}
23
24ShelfWindowWatcherItemDelegate::~ShelfWindowWatcherItemDelegate() {
25}
26
27void ShelfWindowWatcherItemDelegate::Close() {
28  views::Widget::GetWidgetForNativeWindow(window_)->Close();
29}
30
31bool ShelfWindowWatcherItemDelegate::ItemSelected(const ui::Event& event) {
32  wm::WindowState* window_state = wm::GetWindowState(window_);
33  if (window_state->IsActive()) {
34    if (event.type() & ui::ET_KEY_RELEASED) {
35      ::wm::AnimateWindow(window_, ::wm::WINDOW_ANIMATION_TYPE_BOUNCE);
36    } else {
37      window_state->Minimize();
38    }
39  } else {
40    window_state->Activate();
41  }
42
43  return false;
44}
45
46base::string16 ShelfWindowWatcherItemDelegate::GetTitle() {
47  return GetShelfItemDetailsForWindow(window_)->title;
48}
49
50ui::MenuModel* ShelfWindowWatcherItemDelegate::CreateContextMenu(
51    aura::Window* root_window) {
52  ash::ShelfItem item = *(model_->ItemByID(GetShelfIDForWindow(window_)));
53  return Shell::GetInstance()->delegate()->CreateContextMenu(root_window,
54                                                             this,
55                                                             &item);
56}
57
58ShelfMenuModel* ShelfWindowWatcherItemDelegate::CreateApplicationMenu(
59    int event_flags) {
60  return NULL;
61}
62
63bool ShelfWindowWatcherItemDelegate::IsDraggable() {
64  return true;
65}
66
67bool ShelfWindowWatcherItemDelegate::ShouldShowTooltip() {
68  return true;
69}
70
71}  // namespace ash
72