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

Unified Diff: ash/wm/workspace/workspace_manager.cc

Issue 11201002: Removes worskpace 1 code. Will rename next. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove constants and add back kDisableLoginAnimations Created 8 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/wm/workspace/workspace_manager.h ('k') | ash/wm/workspace/workspace_manager2.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/wm/workspace/workspace_manager.cc
diff --git a/ash/wm/workspace/workspace_manager.cc b/ash/wm/workspace/workspace_manager.cc
deleted file mode 100644
index ca87dc738379047c8f628b58aeef7291d4b4adb7..0000000000000000000000000000000000000000
--- a/ash/wm/workspace/workspace_manager.cc
+++ /dev/null
@@ -1,368 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ash/wm/workspace/workspace_manager.h"
-
-#include <algorithm>
-
-#include "ash/screen_ash.h"
-#include "ash/shell.h"
-#include "ash/wm/property_util.h"
-#include "ash/wm/shelf_layout_manager.h"
-#include "ash/wm/window_animations.h"
-#include "ash/wm/window_util.h"
-#include "ash/wm/workspace/managed_workspace.h"
-#include "ash/wm/workspace/maximized_workspace.h"
-#include "base/auto_reset.h"
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "ui/aura/client/aura_constants.h"
-#include "ui/aura/env.h"
-#include "ui/aura/root_window.h"
-#include "ui/aura/window.h"
-#include "ui/base/ui_base_types.h"
-#include "ui/compositor/layer.h"
-#include "ui/compositor/layer_animator.h"
-#include "ui/compositor/scoped_layer_animation_settings.h"
-#include "ui/gfx/screen.h"
-#include "ui/gfx/transform.h"
-
-namespace {
-
-// Returns a list of all the windows with layers in |result|. Optionally
-// ignores the window |ignore_window|.
-void BuildWindowList(const std::vector<aura::Window*>& windows,
- aura::Window* ignore_window,
- std::vector<aura::Window*>* result) {
- for (size_t i = 0; i < windows.size(); ++i) {
- if (windows[i] == ignore_window)
- continue;
- if (windows[i]->layer())
- result->push_back(windows[i]);
- BuildWindowList(windows[i]->transient_children(), ignore_window, result);
- }
-}
-
-}
-
-namespace ash {
-namespace internal {
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowManager, public:
-
-WorkspaceManager::WorkspaceManager(aura::Window* contents_view)
- : contents_view_(contents_view),
- active_workspace_(NULL),
- maximize_restore_window_(NULL),
- grid_size_(0),
- shelf_(NULL) {
- DCHECK(contents_view);
-}
-
-WorkspaceManager::~WorkspaceManager() {
- std::vector<Workspace*> copy_to_delete(workspaces_);
- STLDeleteElements(&copy_to_delete);
-}
-
-// static
-bool WorkspaceManager::ShouldManageWindow(aura::Window* window) {
- return window->type() == aura::client::WINDOW_TYPE_NORMAL &&
- !window->transient_parent() &&
- ash::GetTrackedByWorkspace(window) &&
- (!ash::GetPersistsAcrossAllWorkspaces(window) ||
- wm::IsWindowMaximized(window));
-}
-
-bool WorkspaceManager::Contains(aura::Window* window) const {
- return FindBy(window) != NULL;
-}
-
-void WorkspaceManager::AddWindow(aura::Window* window) {
- DCHECK(ShouldManageWindow(window));
-
- Workspace* current_workspace = FindBy(window);
- if (current_workspace) {
- // Already know about this window. Make sure the workspace is active.
- if (active_workspace_ != current_workspace) {
- if (active_workspace_)
- window->layer()->GetAnimator()->StopAnimating();
- current_workspace->Activate();
- }
- window->Show();
- UpdateShelfVisibility();
- return;
- }
-
- Workspace* workspace = NULL;
- Workspace::Type type_for_window = Workspace::TypeForWindow(window);
- switch (type_for_window) {
- case Workspace::TYPE_MANAGED:
- // All normal windows go in the same workspace.
- workspace = GetManagedWorkspace();
- break;
-
- case Workspace::TYPE_MAXIMIZED:
- // All maximized windows go in their own workspace.
- break;
- }
-
- if (!workspace)
- workspace = CreateWorkspace(type_for_window);
- workspace->AddWindowAfter(window, NULL);
- workspace->Activate();
- UpdateShelfVisibility();
-}
-
-void WorkspaceManager::RemoveWindow(aura::Window* window) {
- Workspace* workspace = FindBy(window);
- if (!workspace)
- return;
- workspace->RemoveWindow(window);
- CleanupWorkspace(workspace);
-}
-
-void WorkspaceManager::UpdateShelfVisibility() {
- if (shelf_)
- shelf_->UpdateVisibilityState();
-}
-
-void WorkspaceManager::ShowStateChanged(aura::Window* window) {
- Workspace* workspace = FindBy(window);
- if (!workspace)
- return;
- if (!ShouldManageWindow(window)) {
- RemoveWindow(window);
- } else {
- Workspace::Type old_type = workspace->type();
- Workspace::Type new_type = Workspace::TypeForWindow(window);
- if (new_type != old_type)
- OnTypeOfWorkspacedNeededChanged(window);
- }
- UpdateShelfVisibility();
-}
-
-bool WorkspaceManager::IsInMaximizedMode() const {
- return active_workspace_ &&
- active_workspace_->type() == Workspace::TYPE_MAXIMIZED;
-}
-
-WorkspaceWindowState WorkspaceManager::GetWindowState() const {
- if (!shelf_ || !active_workspace_)
- return WORKSPACE_WINDOW_STATE_DEFAULT;
-
- // TODO: this code needs to be made multi-display aware.
- gfx::Rect shelf_bounds(shelf_->GetIdealBounds());
- const aura::Window::Windows& windows(contents_view_->children());
- bool window_overlaps_launcher = false;
- bool has_maximized_window = false;
- for (aura::Window::Windows::const_iterator i = windows.begin();
- i != windows.end(); ++i) {
- gfx::Rect b = (*i)->bounds();
- if (GetIgnoredByShelf(*i))
- continue;
- ui::Layer* layer = (*i)->layer();
- if (!layer->GetTargetVisibility() || layer->GetTargetOpacity() == 0.0f)
- continue;
- if (wm::IsWindowMaximized(*i)) {
- // An untracked window may still be fullscreen so we keep iterating when
- // we hit a maximized window.
- has_maximized_window = true;
- } else if (wm::IsWindowFullscreen(*i)) {
- return WORKSPACE_WINDOW_STATE_FULL_SCREEN;
- }
- if (!window_overlaps_launcher && (*i)->bounds().Intersects(shelf_bounds))
- window_overlaps_launcher = true;
- }
- if (has_maximized_window)
- return WORKSPACE_WINDOW_STATE_MAXIMIZED;
-
- return window_overlaps_launcher ?
- WORKSPACE_WINDOW_STATE_WINDOW_OVERLAPS_SHELF :
- WORKSPACE_WINDOW_STATE_DEFAULT;
-}
-
-void WorkspaceManager::SetShelf(ShelfLayoutManager* shelf) {
- shelf_ = shelf;
-}
-
-void WorkspaceManager::SetActiveWorkspaceByWindow(aura::Window* window) {
- Workspace* workspace = FindBy(window);
- if (workspace)
- workspace->Activate();
-}
-
-aura::Window* WorkspaceManager::GetParentForNewWindow(aura::Window* window) {
- return contents_view_;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WorkspaceManager, private:
-
-void WorkspaceManager::AddWorkspace(Workspace* workspace) {
- DCHECK(std::find(workspaces_.begin(), workspaces_.end(),
- workspace) == workspaces_.end());
- if (active_workspace_) {
- // New workspaces go right after current workspace.
- Workspaces::iterator i = std::find(workspaces_.begin(), workspaces_.end(),
- active_workspace_);
- workspaces_.insert(++i, workspace);
- } else {
- workspaces_.push_back(workspace);
- }
-}
-
-void WorkspaceManager::RemoveWorkspace(Workspace* workspace) {
- Workspaces::iterator i = std::find(workspaces_.begin(),
- workspaces_.end(),
- workspace);
- DCHECK(i != workspaces_.end());
- i = workspaces_.erase(i);
- if (active_workspace_ == workspace) {
- // TODO: need mru order.
- if (i != workspaces_.end())
- SetActiveWorkspace(*i);
- else if (!workspaces_.empty())
- SetActiveWorkspace(workspaces_.back());
- else
- active_workspace_ = NULL;
- }
-}
-
-void WorkspaceManager::SetVisibilityOfWorkspaceWindows(
- ash::internal::Workspace* workspace,
- AnimateChangeType change_type,
- bool value) {
- std::vector<aura::Window*> children;
- BuildWindowList(workspace->windows(), maximize_restore_window_, &children);
- SetWindowLayerVisibility(children, change_type, value);
-}
-
-void WorkspaceManager::SetWindowLayerVisibility(
- const std::vector<aura::Window*>& windows,
- AnimateChangeType change_type,
- bool value) {
- for (size_t i = 0; i < windows.size(); ++i) {
- ui::Layer* layer = windows[i]->layer();
- // Only show the layer for windows that want to be visible.
- if (layer && (!value || windows[i]->TargetVisibility())) {
- bool animation_disabled =
- windows[i]->GetProperty(aura::client::kAnimationsDisabledKey);
- WindowVisibilityAnimationType animation_type =
- GetWindowVisibilityAnimationType(windows[i]);
- windows[i]->SetProperty(aura::client::kAnimationsDisabledKey,
- change_type == DONT_ANIMATE);
- bool update_layer = true;
- if (change_type == ANIMATE) {
- ash::SetWindowVisibilityAnimationType(
- windows[i],
- value ? ash::WINDOW_VISIBILITY_ANIMATION_TYPE_WORKSPACE_SHOW :
- ash::WINDOW_VISIBILITY_ANIMATION_TYPE_WORKSPACE_HIDE);
- if (ash::internal::AnimateOnChildWindowVisibilityChanged(
- windows[i], value))
- update_layer = false;
- }
- if (update_layer)
- layer->SetVisible(value);
- // Reset the animation type so it isn't used in a future hide/show.
- ash::SetWindowVisibilityAnimationType(
- windows[i], animation_type);
- windows[i]->SetProperty(aura::client::kAnimationsDisabledKey,
- animation_disabled);
- }
- }
-}
-
-Workspace* WorkspaceManager::GetActiveWorkspace() const {
- return active_workspace_;
-}
-
-Workspace* WorkspaceManager::FindBy(aura::Window* window) const {
- int index = GetWorkspaceIndexContaining(window);
- return index < 0 ? NULL : workspaces_[index];
-}
-
-void WorkspaceManager::SetActiveWorkspace(Workspace* workspace) {
- if (active_workspace_ == workspace)
- return;
- DCHECK(std::find(workspaces_.begin(), workspaces_.end(),
- workspace) != workspaces_.end());
- if (active_workspace_)
- SetVisibilityOfWorkspaceWindows(active_workspace_, ANIMATE, false);
- Workspace* last_active = active_workspace_;
- active_workspace_ = workspace;
- if (active_workspace_) {
- SetVisibilityOfWorkspaceWindows(active_workspace_,
- last_active ? ANIMATE : DONT_ANIMATE, true);
- UpdateShelfVisibility();
- }
-}
-
-// Returns the index of the workspace that contains the |window|.
-int WorkspaceManager::GetWorkspaceIndexContaining(aura::Window* window) const {
- for (Workspaces::const_iterator i = workspaces_.begin();
- i != workspaces_.end();
- ++i) {
- if ((*i)->Contains(window))
- return i - workspaces_.begin();
- }
- return -1;
-}
-
-void WorkspaceManager::SetWindowBounds(aura::Window* window,
- const gfx::Rect& bounds) {
- window->SetBounds(bounds);
-}
-
-void WorkspaceManager::OnTypeOfWorkspacedNeededChanged(aura::Window* window) {
- DCHECK(ShouldManageWindow(window));
- Workspace* current_workspace = FindBy(window);
- DCHECK(current_workspace);
- Workspace* new_workspace = NULL;
- if (Workspace::TypeForWindow(window) == Workspace::TYPE_MAXIMIZED) {
- // Unmaximized -> maximized; create a new workspace.
- current_workspace->RemoveWindow(window);
- new_workspace = CreateWorkspace(Workspace::TYPE_MAXIMIZED);
- new_workspace->AddWindowAfter(window, NULL);
- } else {
- // Maximized -> unmaximized; move window to unmaximized workspace.
- new_workspace = GetManagedWorkspace();
- current_workspace->RemoveWindow(window);
- if (!new_workspace)
- new_workspace = CreateWorkspace(Workspace::TYPE_MANAGED);
- new_workspace->AddWindowAfter(window, NULL);
- }
- maximize_restore_window_ = window;
- SetActiveWorkspace(new_workspace);
- maximize_restore_window_ = NULL;
- // Delete at the end so that we don't attempt to switch to another
- // workspace in RemoveWorkspace().
- CleanupWorkspace(current_workspace);
-}
-
-Workspace* WorkspaceManager::GetManagedWorkspace() {
- for (size_t i = 0; i < workspaces_.size(); ++i) {
- if (workspaces_[i]->type() == Workspace::TYPE_MANAGED)
- return workspaces_[i];
- }
- return NULL;
-}
-
-Workspace* WorkspaceManager::CreateWorkspace(Workspace::Type type) {
- Workspace* workspace = NULL;
- if (type == Workspace::TYPE_MAXIMIZED)
- workspace = new MaximizedWorkspace(this);
- else
- workspace = new ManagedWorkspace(this);
- AddWorkspace(workspace);
- return workspace;
-}
-
-void WorkspaceManager::CleanupWorkspace(Workspace* workspace) {
- if (workspace->type() != Workspace::TYPE_MANAGED && workspace->is_empty())
- delete workspace;
-}
-
-} // namespace internal
-} // namespace ash
« no previous file with comments | « ash/wm/workspace/workspace_manager.h ('k') | ash/wm/workspace/workspace_manager2.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698