Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(195)

Side by Side Diff: ash/wm/window_cycle_controller.cc

Issue 12618014: Switch Next Window Key functionality (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: gesture change Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "ash/wm/window_cycle_controller.h" 5 #include "ash/wm/window_cycle_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/shell_delegate.h" 9 #include "ash/shell_delegate.h"
10 #include "ash/shell_window_ids.h" 10 #include "ash/shell_window_ids.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 Step(direction); 142 Step(direction);
143 } 143 }
144 } else { 144 } else {
145 // This is a simple, single-step window cycle. 145 // This is a simple, single-step window cycle.
146 StartCycling(); 146 StartCycling();
147 Step(direction); 147 Step(direction);
148 StopCycling(); 148 StopCycling();
149 } 149 }
150 } 150 }
151 151
152 void WindowCycleController::HandleLinearCycleWindow() {
153 if (!CanCycle() || IsCycling())
154 return;
155
156 // Use the reversed list of windows to prevent a 2-cycle of the most recent
157 // windows occurring.
158 WindowCycleList cycle_list(BuildWindowList(NULL,true));
159 cycle_list.Step(WindowCycleList::FORWARD);
160 }
161
152 void WindowCycleController::AltKeyReleased() { 162 void WindowCycleController::AltKeyReleased() {
153 StopCycling(); 163 StopCycling();
154 } 164 }
155 165
156 // static 166 // static
157 std::vector<aura::Window*> WindowCycleController::BuildWindowList( 167 std::vector<aura::Window*> WindowCycleController::BuildWindowList(
158 const std::list<aura::Window*>* mru_windows) { 168 const std::list<aura::Window*>* mru_windows,
169 bool top_most_at_end) {
159 WindowCycleList::WindowList windows; 170 WindowCycleList::WindowList windows;
160 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); 171 Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
161 172
162 aura::RootWindow* active_root = Shell::GetActiveRootWindow(); 173 aura::RootWindow* active_root = Shell::GetActiveRootWindow();
163 for (Shell::RootWindowList::const_iterator iter = root_windows.begin(); 174 for (Shell::RootWindowList::const_iterator iter = root_windows.begin();
164 iter != root_windows.end(); ++iter) { 175 iter != root_windows.end(); ++iter) {
165 if (*iter == active_root) 176 if (*iter == active_root)
166 continue; 177 continue;
167 for (size_t i = 0; i < arraysize(kContainerIds); ++i) 178 for (size_t i = 0; i < arraysize(kContainerIds); ++i)
168 AddCycleWindows(*iter, kContainerIds[i], &windows); 179 AddCycleWindows(*iter, kContainerIds[i], &windows);
(...skipping 22 matching lines...) Expand all
191 WindowCycleList::WindowList::iterator window = 202 WindowCycleList::WindowList::iterator window =
192 std::find(windows.begin(), windows.end(), *ix); 203 std::find(windows.begin(), windows.end(), *ix);
193 if (window != windows.end()) { 204 if (window != windows.end()) {
194 windows.erase(window); 205 windows.erase(window);
195 windows.push_back(*ix); 206 windows.push_back(*ix);
196 } 207 }
197 } 208 }
198 } 209 }
199 210
200 // Window cycling expects the topmost window at the front of the list. 211 // Window cycling expects the topmost window at the front of the list.
201 std::reverse(windows.begin(), windows.end()); 212 if (!top_most_at_end)
213 std::reverse(windows.begin(), windows.end());
202 214
203 return windows; 215 return windows;
204 } 216 }
205 217
206 void WindowCycleController::OnRootWindowAdded(aura::RootWindow* root_window) { 218 void WindowCycleController::OnRootWindowAdded(aura::RootWindow* root_window) {
207 for (size_t i = 0; i < arraysize(kContainerIds); ++i) { 219 for (size_t i = 0; i < arraysize(kContainerIds); ++i) {
208 aura::Window* container = 220 aura::Window* container =
209 Shell::GetContainer(root_window, kContainerIds[i]); 221 Shell::GetContainer(root_window, kContainerIds[i]);
210 container->AddObserver(this); 222 container->AddObserver(this);
211 } 223 }
212 224
213 aura::Window* default_container = 225 aura::Window* default_container =
214 Shell::GetContainer(root_window, 226 Shell::GetContainer(root_window,
215 internal::kShellWindowId_DefaultContainer); 227 internal::kShellWindowId_DefaultContainer);
216 for (size_t i = 0; i < default_container->children().size(); ++i) { 228 for (size_t i = 0; i < default_container->children().size(); ++i) {
217 aura::Window* workspace_window = default_container->children()[i]; 229 aura::Window* workspace_window = default_container->children()[i];
218 DCHECK_EQ(internal::kShellWindowId_WorkspaceContainer, 230 DCHECK_EQ(internal::kShellWindowId_WorkspaceContainer,
219 workspace_window->id()); 231 workspace_window->id());
220 workspace_window->AddObserver(this); 232 workspace_window->AddObserver(this);
221 } 233 }
222 } 234 }
223 235
224 ////////////////////////////////////////////////////////////////////////////// 236 //////////////////////////////////////////////////////////////////////////////
225 // WindowCycleController, private: 237 // WindowCycleController, private:
226 238
227 void WindowCycleController::StartCycling() { 239 void WindowCycleController::StartCycling() {
228 windows_.reset(new WindowCycleList(BuildWindowList(&mru_windows_))); 240 windows_.reset(new WindowCycleList(BuildWindowList(&mru_windows_, false)));
229 } 241 }
230 242
231 void WindowCycleController::Step(Direction direction) { 243 void WindowCycleController::Step(Direction direction) {
232 DCHECK(windows_.get()); 244 DCHECK(windows_.get());
233 windows_->Step(direction == FORWARD ? WindowCycleList::FORWARD : 245 windows_->Step(direction == FORWARD ? WindowCycleList::FORWARD :
234 WindowCycleList::BACKWARD); 246 WindowCycleList::BACKWARD);
235 } 247 }
236 248
237 void WindowCycleController::StopCycling() { 249 void WindowCycleController::StopCycling() {
238 windows_.reset(); 250 windows_.reset();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 mru_windows_.remove(window); 295 mru_windows_.remove(window);
284 if (window->id() == internal::kShellWindowId_WorkspaceContainer) 296 if (window->id() == internal::kShellWindowId_WorkspaceContainer)
285 window->RemoveObserver(this); 297 window->RemoveObserver(this);
286 } 298 }
287 299
288 void WindowCycleController::OnWindowDestroying(aura::Window* window) { 300 void WindowCycleController::OnWindowDestroying(aura::Window* window) {
289 window->RemoveObserver(this); 301 window->RemoveObserver(this);
290 } 302 }
291 303
292 } // namespace ash 304 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/window_cycle_controller.h ('k') | chrome/browser/chromeos/extensions/wallpaper_private_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698