OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/shell_window_launcher_item_controller.h
" | 5 #include "chrome/browser/ui/ash/launcher/shell_window_launcher_item_controller.h
" |
6 | 6 |
7 #include "apps/native_app_window.h" | 7 #include "apps/native_app_window.h" |
8 #include "apps/shell_window.h" | 8 #include "apps/shell_window.h" |
| 9 #include "ash/launcher/launcher_model.h" |
9 #include "ash/wm/window_state.h" | 10 #include "ash/wm/window_state.h" |
10 #include "ash/wm/window_util.h" | 11 #include "ash/wm/window_util.h" |
11 #include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item.h" | 12 #include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item.h" |
12 #include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item_v2app.h" | 13 #include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item_v2app.h" |
13 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" | 14 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" |
| 15 #include "chrome/browser/ui/ash/launcher/launcher_application_menu_item_model.h" |
| 16 #include "chrome/browser/ui/ash/launcher/launcher_context_menu.h" |
14 #include "chrome/browser/ui/ash/launcher/launcher_item_controller.h" | 17 #include "chrome/browser/ui/ash/launcher/launcher_item_controller.h" |
15 #include "content/public/browser/web_contents.h" | 18 #include "content/public/browser/web_contents.h" |
16 #include "ui/aura/client/aura_constants.h" | 19 #include "ui/aura/client/aura_constants.h" |
17 #include "ui/aura/window.h" | 20 #include "ui/aura/window.h" |
18 #include "ui/events/event.h" | 21 #include "ui/events/event.h" |
19 #include "ui/views/corewm/window_animations.h" | 22 #include "ui/views/corewm/window_animations.h" |
20 | 23 |
21 using apps::ShellWindow; | 24 using apps::ShellWindow; |
22 | 25 |
23 namespace { | 26 namespace { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 } | 77 } |
75 | 78 |
76 void ShellWindowLauncherItemController::SetActiveWindow(aura::Window* window) { | 79 void ShellWindowLauncherItemController::SetActiveWindow(aura::Window* window) { |
77 ShellWindowList::iterator iter = | 80 ShellWindowList::iterator iter = |
78 std::find_if(shell_windows_.begin(), shell_windows_.end(), | 81 std::find_if(shell_windows_.begin(), shell_windows_.end(), |
79 ShellWindowHasWindow(window)); | 82 ShellWindowHasWindow(window)); |
80 if (iter != shell_windows_.end()) | 83 if (iter != shell_windows_.end()) |
81 last_active_shell_window_ = *iter; | 84 last_active_shell_window_ = *iter; |
82 } | 85 } |
83 | 86 |
84 string16 ShellWindowLauncherItemController::GetTitle() { | |
85 // For panels return the title of the contents if set. | |
86 // Otherwise return the title of the app. | |
87 if (type() == TYPE_APP_PANEL && !shell_windows_.empty()) { | |
88 ShellWindow* shell_window = shell_windows_.front(); | |
89 if (shell_window->web_contents()) { | |
90 string16 title = shell_window->web_contents()->GetTitle(); | |
91 if (!title.empty()) | |
92 return title; | |
93 } | |
94 } | |
95 return GetAppTitle(); | |
96 } | |
97 | |
98 bool ShellWindowLauncherItemController::IsCurrentlyShownInWindow( | 87 bool ShellWindowLauncherItemController::IsCurrentlyShownInWindow( |
99 aura::Window* window) const { | 88 aura::Window* window) const { |
100 ShellWindowList::const_iterator iter = | 89 ShellWindowList::const_iterator iter = |
101 std::find_if(shell_windows_.begin(), shell_windows_.end(), | 90 std::find_if(shell_windows_.begin(), shell_windows_.end(), |
102 ShellWindowHasWindow(window)); | 91 ShellWindowHasWindow(window)); |
103 return iter != shell_windows_.end(); | 92 return iter != shell_windows_.end(); |
104 } | 93 } |
105 | 94 |
106 bool ShellWindowLauncherItemController::IsOpen() const { | 95 bool ShellWindowLauncherItemController::IsOpen() const { |
107 return !shell_windows_.empty(); | 96 return !shell_windows_.empty(); |
(...skipping 25 matching lines...) Expand all Loading... |
133 | 122 |
134 void ShellWindowLauncherItemController::Close() { | 123 void ShellWindowLauncherItemController::Close() { |
135 // Note: Closing windows may affect the contents of shell_windows_. | 124 // Note: Closing windows may affect the contents of shell_windows_. |
136 ShellWindowList windows_to_close = shell_windows_; | 125 ShellWindowList windows_to_close = shell_windows_; |
137 for (ShellWindowList::iterator iter = windows_to_close.begin(); | 126 for (ShellWindowList::iterator iter = windows_to_close.begin(); |
138 iter != windows_to_close.end(); ++iter) { | 127 iter != windows_to_close.end(); ++iter) { |
139 (*iter)->GetBaseWindow()->Close(); | 128 (*iter)->GetBaseWindow()->Close(); |
140 } | 129 } |
141 } | 130 } |
142 | 131 |
143 void ShellWindowLauncherItemController::Clicked(const ui::Event& event) { | 132 void ShellWindowLauncherItemController::ActivateIndexedApp(size_t index) { |
| 133 if (index >= shell_windows_.size()) |
| 134 return; |
| 135 ShellWindowList::iterator it = shell_windows_.begin(); |
| 136 std::advance(it, index); |
| 137 ShowAndActivateOrMinimize(*it); |
| 138 } |
| 139 |
| 140 ChromeLauncherAppMenuItems |
| 141 ShellWindowLauncherItemController::GetApplicationList(int event_flags) { |
| 142 ChromeLauncherAppMenuItems items; |
| 143 items.push_back(new ChromeLauncherAppMenuItem(GetTitle(), NULL, false)); |
| 144 int index = 0; |
| 145 for (ShellWindowList::iterator iter = shell_windows_.begin(); |
| 146 iter != shell_windows_.end(); ++iter) { |
| 147 ShellWindow* shell_window = *iter; |
| 148 scoped_ptr<gfx::Image> image(shell_window->GetAppListIcon()); |
| 149 items.push_back(new ChromeLauncherAppMenuItemV2App( |
| 150 shell_window->GetTitle(), |
| 151 image.get(), // Will be copied |
| 152 app_id(), |
| 153 launcher_controller(), |
| 154 index, |
| 155 index == 0 /* has_leading_separator */)); |
| 156 ++index; |
| 157 } |
| 158 return items.Pass(); |
| 159 } |
| 160 |
| 161 void ShellWindowLauncherItemController::ItemSelected(const ui::Event& event) { |
144 if (shell_windows_.empty()) | 162 if (shell_windows_.empty()) |
145 return; | 163 return; |
146 if (type() == TYPE_APP_PANEL) { | 164 if (type() == TYPE_APP_PANEL) { |
147 DCHECK(shell_windows_.size() == 1); | 165 DCHECK(shell_windows_.size() == 1); |
148 ShellWindow* panel = shell_windows_.front(); | 166 ShellWindow* panel = shell_windows_.front(); |
149 aura::Window* panel_window = panel->GetNativeWindow(); | 167 aura::Window* panel_window = panel->GetNativeWindow(); |
150 // If the panel is attached on another display, move it to the current | 168 // If the panel is attached on another display, move it to the current |
151 // display and activate it. | 169 // display and activate it. |
152 if (ash::wm::GetWindowState(panel_window)->panel_attached() && | 170 if (ash::wm::GetWindowState(panel_window)->panel_attached() && |
153 ash::wm::MoveWindowToEventRoot(panel_window, event)) { | 171 ash::wm::MoveWindowToEventRoot(panel_window, event)) { |
(...skipping 10 matching lines...) Expand all Loading... |
164 if (shell_windows_.size() >= 1 && | 182 if (shell_windows_.size() >= 1 && |
165 window_to_show->GetBaseWindow()->IsActive() && | 183 window_to_show->GetBaseWindow()->IsActive() && |
166 event.type() == ui::ET_KEY_RELEASED) { | 184 event.type() == ui::ET_KEY_RELEASED) { |
167 ActivateOrAdvanceToNextShellWindow(window_to_show); | 185 ActivateOrAdvanceToNextShellWindow(window_to_show); |
168 } else { | 186 } else { |
169 ShowAndActivateOrMinimize(window_to_show); | 187 ShowAndActivateOrMinimize(window_to_show); |
170 } | 188 } |
171 } | 189 } |
172 } | 190 } |
173 | 191 |
174 void ShellWindowLauncherItemController::ActivateIndexedApp(size_t index) { | 192 base::string16 ShellWindowLauncherItemController::GetTitle() { |
175 if (index >= shell_windows_.size()) | 193 // For panels return the title of the contents if set. |
176 return; | 194 // Otherwise return the title of the app. |
177 ShellWindowList::iterator it = shell_windows_.begin(); | 195 if (type() == TYPE_APP_PANEL && !shell_windows_.empty()) { |
178 std::advance(it, index); | 196 ShellWindow* shell_window = shell_windows_.front(); |
179 ShowAndActivateOrMinimize(*it); | 197 if (shell_window->web_contents()) { |
| 198 string16 title = shell_window->web_contents()->GetTitle(); |
| 199 if (!title.empty()) |
| 200 return title; |
| 201 } |
| 202 } |
| 203 return GetAppTitle(); |
180 } | 204 } |
181 | 205 |
182 ChromeLauncherAppMenuItems | 206 ui::MenuModel* ShellWindowLauncherItemController::CreateContextMenu( |
183 ShellWindowLauncherItemController::GetApplicationList(int event_flags) { | 207 aura::RootWindow* root_window) { |
184 ChromeLauncherAppMenuItems items; | 208 ash::LauncherItem item = |
185 items.push_back(new ChromeLauncherAppMenuItem(GetTitle(), NULL, false)); | 209 *(launcher_controller()->model()->ItemByID(launcher_id())); |
186 int index = 0; | 210 return new LauncherContextMenu(launcher_controller(), &item, root_window); |
187 for (ShellWindowList::iterator iter = shell_windows_.begin(); | 211 } |
188 iter != shell_windows_.end(); ++iter) { | 212 |
189 ShellWindow* shell_window = *iter; | 213 ash::LauncherMenuModel* |
190 scoped_ptr<gfx::Image> image(shell_window->GetAppListIcon()); | 214 ShellWindowLauncherItemController::CreateApplicationMenu(int event_flags) { |
191 items.push_back(new ChromeLauncherAppMenuItemV2App( | 215 return new LauncherApplicationMenuItemModel(GetApplicationList(event_flags)); |
192 shell_window->GetTitle(), | 216 } |
193 image.get(), // Will be copied | 217 |
194 app_id(), | 218 bool ShellWindowLauncherItemController::IsDraggable() { |
195 launcher_controller(), | 219 if (type() == TYPE_APP_PANEL) |
196 index, | 220 return true; |
197 index == 0 /* has_leading_separator */)); | 221 return launcher_controller()->CanPin() ? true : false; |
198 ++index; | 222 } |
199 } | 223 |
200 return items.Pass(); | 224 bool ShellWindowLauncherItemController::ShouldShowTooltip() { |
| 225 if (type() == TYPE_APP_PANEL && IsVisible()) |
| 226 return false; |
| 227 return true; |
201 } | 228 } |
202 | 229 |
203 void ShellWindowLauncherItemController::OnWindowPropertyChanged( | 230 void ShellWindowLauncherItemController::OnWindowPropertyChanged( |
204 aura::Window* window, | 231 aura::Window* window, |
205 const void* key, | 232 const void* key, |
206 intptr_t old) { | 233 intptr_t old) { |
207 if (key == aura::client::kDrawAttentionKey) { | 234 if (key == aura::client::kDrawAttentionKey) { |
208 ash::LauncherItemStatus status; | 235 ash::LauncherItemStatus status; |
209 if (ash::wm::IsActiveWindow(window)) { | 236 if (ash::wm::IsActiveWindow(window)) { |
210 status = ash::STATUS_ACTIVE; | 237 status = ash::STATUS_ACTIVE; |
(...skipping 28 matching lines...) Expand all Loading... |
239 } | 266 } |
240 if (window_to_show->GetBaseWindow()->IsActive()) { | 267 if (window_to_show->GetBaseWindow()->IsActive()) { |
241 // Coming here, only a single window is active. For keyboard activations | 268 // Coming here, only a single window is active. For keyboard activations |
242 // the window gets animated. | 269 // the window gets animated. |
243 AnimateWindow(window_to_show->GetNativeWindow(), | 270 AnimateWindow(window_to_show->GetNativeWindow(), |
244 views::corewm::WINDOW_ANIMATION_TYPE_BOUNCE); | 271 views::corewm::WINDOW_ANIMATION_TYPE_BOUNCE); |
245 } else { | 272 } else { |
246 ShowAndActivateOrMinimize(window_to_show); | 273 ShowAndActivateOrMinimize(window_to_show); |
247 } | 274 } |
248 } | 275 } |
OLD | NEW |