| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/ash/launcher/app_window_launcher_item_controller.h" | 5 #include "chrome/browser/ui/ash/launcher/app_window_launcher_item_controller.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "ash/wm/window_util.h" | 9 #include "ash/wm/window_util.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 ui::BaseWindow* app_window = GetAppWindow(window); | 67 ui::BaseWindow* app_window = GetAppWindow(window); |
| 68 if (app_window) | 68 if (app_window) |
| 69 last_active_window_ = app_window; | 69 last_active_window_ = app_window; |
| 70 } | 70 } |
| 71 | 71 |
| 72 AppWindowLauncherItemController* | 72 AppWindowLauncherItemController* |
| 73 AppWindowLauncherItemController::AsAppWindowLauncherItemController() { | 73 AppWindowLauncherItemController::AsAppWindowLauncherItemController() { |
| 74 return this; | 74 return this; |
| 75 } | 75 } |
| 76 | 76 |
| 77 ash::ShelfAction AppWindowLauncherItemController::ItemSelected( | 77 void AppWindowLauncherItemController::ItemSelected( |
| 78 ui::EventType event_type, | 78 std::unique_ptr<ui::Event> event, |
| 79 int event_flags, | |
| 80 int64_t display_id, | 79 int64_t display_id, |
| 81 ash::ShelfLaunchSource source) { | 80 ash::ShelfLaunchSource source, |
| 82 if (windows_.empty()) | 81 const ItemSelectedCallback& callback) { |
| 83 return ash::SHELF_ACTION_NONE; | 82 if (windows_.empty()) { |
| 83 callback.Run(ash::SHELF_ACTION_NONE, |
| 84 std::vector<ash::mojom::MenuItemPtr>()); |
| 85 return; |
| 86 } |
| 84 | 87 |
| 85 ui::BaseWindow* window_to_show = | 88 ui::BaseWindow* window_to_show = |
| 86 last_active_window_ ? last_active_window_ : windows_.front(); | 89 last_active_window_ ? last_active_window_ : windows_.front(); |
| 87 // If the event was triggered by a keystroke, we try to advance to the next | 90 // If the event was triggered by a keystroke, we try to advance to the next |
| 88 // item if the window we are trying to activate is already active. | 91 // item if the window we are trying to activate is already active. |
| 89 if (windows_.size() >= 1 && window_to_show->IsActive() && | 92 ash::ShelfAction action = ash::SHELF_ACTION_NONE; |
| 90 event_type == ui::ET_KEY_RELEASED) { | 93 if (windows_.size() >= 1 && window_to_show->IsActive() && event && |
| 91 return ActivateOrAdvanceToNextAppWindow(window_to_show); | 94 event->type() == ui::ET_KEY_RELEASED) { |
| 95 action = ActivateOrAdvanceToNextAppWindow(window_to_show); |
| 96 } else { |
| 97 action = ShowAndActivateOrMinimize(window_to_show); |
| 92 } | 98 } |
| 93 | 99 |
| 94 return ShowAndActivateOrMinimize(window_to_show); | 100 callback.Run(action, GetAppMenuItems(event ? event->flags() : ui::EF_NONE)); |
| 95 } | |
| 96 | |
| 97 ash::ShelfAppMenuItemList AppWindowLauncherItemController::GetAppMenuItems( | |
| 98 int event_flags) { | |
| 99 // Return an empty item list to avoid showing an application menu. | |
| 100 return ash::ShelfAppMenuItemList(); | |
| 101 } | 101 } |
| 102 | 102 |
| 103 void AppWindowLauncherItemController::ExecuteCommand(uint32_t command_id, | 103 void AppWindowLauncherItemController::ExecuteCommand(uint32_t command_id, |
| 104 int event_flags) { | 104 int32_t event_flags) { |
| 105 // This delegate does not support showing an application menu. | 105 // This delegate does not support showing an application menu. |
| 106 NOTIMPLEMENTED(); | 106 NOTIMPLEMENTED(); |
| 107 } | 107 } |
| 108 | 108 |
| 109 void AppWindowLauncherItemController::Close() { | 109 void AppWindowLauncherItemController::Close() { |
| 110 // Note: Closing windows may affect the contents of app_windows_. | 110 // Note: Closing windows may affect the contents of app_windows_. |
| 111 WindowList windows_to_close = windows_; | 111 WindowList windows_to_close = windows_; |
| 112 for (auto* window : windows_) | 112 for (auto* window : windows_) |
| 113 window->Close(); | 113 window->Close(); |
| 114 } | 114 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 135 status = ash::STATUS_RUNNING; | 135 status = ash::STATUS_RUNNING; |
| 136 } | 136 } |
| 137 launcher_controller()->SetItemStatus(shelf_id(), status); | 137 launcher_controller()->SetItemStatus(shelf_id(), status); |
| 138 } | 138 } |
| 139 } | 139 } |
| 140 | 140 |
| 141 ash::ShelfAction AppWindowLauncherItemController::ShowAndActivateOrMinimize( | 141 ash::ShelfAction AppWindowLauncherItemController::ShowAndActivateOrMinimize( |
| 142 ui::BaseWindow* app_window) { | 142 ui::BaseWindow* app_window) { |
| 143 // Either show or minimize windows when shown from the launcher. | 143 // Either show or minimize windows when shown from the launcher. |
| 144 return launcher_controller()->ActivateWindowOrMinimizeIfActive( | 144 return launcher_controller()->ActivateWindowOrMinimizeIfActive( |
| 145 app_window, GetAppMenuItems(0).size() == 1); | 145 app_window, GetAppMenuItems(ui::EF_NONE).size() == 1); |
| 146 } | 146 } |
| 147 | 147 |
| 148 ash::ShelfAction | 148 ash::ShelfAction |
| 149 AppWindowLauncherItemController::ActivateOrAdvanceToNextAppWindow( | 149 AppWindowLauncherItemController::ActivateOrAdvanceToNextAppWindow( |
| 150 ui::BaseWindow* window_to_show) { | 150 ui::BaseWindow* window_to_show) { |
| 151 WindowList::iterator i( | 151 WindowList::iterator i( |
| 152 std::find(windows_.begin(), windows_.end(), window_to_show)); | 152 std::find(windows_.begin(), windows_.end(), window_to_show)); |
| 153 if (i != windows_.end()) { | 153 if (i != windows_.end()) { |
| 154 if (++i != windows_.end()) | 154 if (++i != windows_.end()) |
| 155 window_to_show = *i; | 155 window_to_show = *i; |
| 156 else | 156 else |
| 157 window_to_show = windows_.front(); | 157 window_to_show = windows_.front(); |
| 158 } | 158 } |
| 159 if (window_to_show->IsActive()) { | 159 if (window_to_show->IsActive()) { |
| 160 // Coming here, only a single window is active. For keyboard activations | 160 // Coming here, only a single window is active. For keyboard activations |
| 161 // the window gets animated. | 161 // the window gets animated. |
| 162 AnimateWindow(window_to_show->GetNativeWindow(), | 162 AnimateWindow(window_to_show->GetNativeWindow(), |
| 163 wm::WINDOW_ANIMATION_TYPE_BOUNCE); | 163 wm::WINDOW_ANIMATION_TYPE_BOUNCE); |
| 164 } else { | 164 } else { |
| 165 return ShowAndActivateOrMinimize(window_to_show); | 165 return ShowAndActivateOrMinimize(window_to_show); |
| 166 } | 166 } |
| 167 return ash::SHELF_ACTION_NONE; | 167 return ash::SHELF_ACTION_NONE; |
| 168 } | 168 } |
| OLD | NEW |