Index: ash/wm/workspace/workspace_manager.cc |
diff --git a/ash/wm/workspace/workspace_manager.cc b/ash/wm/workspace/workspace_manager.cc |
index 0f591e58be4016c68253a27a364c00afb21fe056..0426d781a3da2da6555edca6d1a35432201e3953 100644 |
--- a/ash/wm/workspace/workspace_manager.cc |
+++ b/ash/wm/workspace/workspace_manager.cc |
@@ -262,6 +262,33 @@ Window* WorkspaceManager::GetParentForNewWindow(Window* window) { |
return desktop_workspace()->window(); |
} |
+bool WorkspaceManager::CycleToWorkspace(CycleDirection direction) { |
+ aura::Window* active_window = wm::GetActiveWindow(); |
+ if (!active_workspace_->window()->Contains(active_window)) |
+ active_window = NULL; |
+ |
+ Workspaces::const_iterator workspace_i(FindWorkspace(active_workspace_)); |
+ int workspace_offset = 0; |
+ if (direction == CYCLE_PREVIOUS) { |
+ workspace_offset = 1; |
+ if (workspace_i == workspaces_.end() - 1) |
+ return false; |
+ } else { |
+ workspace_offset = -1; |
+ if (workspace_i == workspaces_.begin()) |
+ return false; |
+ } |
+ |
+ Workspaces::const_iterator next_workspace_i(workspace_i + workspace_offset); |
+ SetActiveWorkspace(*next_workspace_i, SWITCH_OTHER, base::TimeDelta()); |
+ |
+ // The activation controller will pick a window from the just activated |
+ // workspace to activate as a result of DeactivateWindow(). |
+ if (active_window) |
+ wm::DeactivateWindow(active_window); |
+ return true; |
+} |
+ |
void WorkspaceManager::DoInitialAnimation() { |
if (active_workspace_->is_maximized()) { |
RootWindowController* root_controller = GetRootWindowController( |