| 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 "ash/wm/workspace/workspace_manager.h" | 5 #include "ash/wm/workspace/workspace_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "ash/wm/property_util.h" | 10 #include "ash/wm/property_util.h" |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 } | 57 } |
| 58 | 58 |
| 59 } | 59 } |
| 60 | 60 |
| 61 namespace ash { | 61 namespace ash { |
| 62 namespace internal { | 62 namespace internal { |
| 63 | 63 |
| 64 //////////////////////////////////////////////////////////////////////////////// | 64 //////////////////////////////////////////////////////////////////////////////// |
| 65 // WindowManager, public: | 65 // WindowManager, public: |
| 66 | 66 |
| 67 // static | |
| 68 const int WorkspaceManager::kOpenMaximizedThreshold = 1600; | |
| 69 | |
| 70 WorkspaceManager::WorkspaceManager(aura::Window* contents_view) | 67 WorkspaceManager::WorkspaceManager(aura::Window* contents_view) |
| 71 : contents_view_(contents_view), | 68 : contents_view_(contents_view), |
| 72 active_workspace_(NULL), | 69 active_workspace_(NULL), |
| 73 workspace_size_( | 70 workspace_size_( |
| 74 gfx::Screen::GetMonitorAreaNearestWindow(contents_view_).size()), | 71 gfx::Screen::GetMonitorAreaNearestWindow(contents_view_).size()), |
| 75 is_overview_(false), | 72 is_overview_(false), |
| 76 ignored_window_(NULL), | 73 ignored_window_(NULL), |
| 77 grid_size_(0), | 74 grid_size_(0), |
| 78 open_new_windows_maximized_(true), | |
| 79 shelf_(NULL) { | 75 shelf_(NULL) { |
| 80 DCHECK(contents_view); | 76 DCHECK(contents_view); |
| 81 } | 77 } |
| 82 | 78 |
| 83 WorkspaceManager::~WorkspaceManager() { | 79 WorkspaceManager::~WorkspaceManager() { |
| 84 for (size_t i = 0; i < workspaces_.size(); ++i) { | 80 for (size_t i = 0; i < workspaces_.size(); ++i) { |
| 85 Workspace* workspace = workspaces_[i]; | 81 Workspace* workspace = workspaces_[i]; |
| 86 for (size_t j = 0; j < workspace->windows().size(); ++j) | 82 for (size_t j = 0; j < workspace->windows().size(); ++j) |
| 87 workspace->windows()[j]->RemoveObserver(this); | 83 workspace->windows()[j]->RemoveObserver(this); |
| 88 } | 84 } |
| 89 std::vector<Workspace*> copy_to_delete(workspaces_); | 85 std::vector<Workspace*> copy_to_delete(workspaces_); |
| 90 STLDeleteElements(©_to_delete); | 86 STLDeleteElements(©_to_delete); |
| 91 } | 87 } |
| 92 | 88 |
| 93 bool WorkspaceManager::IsManagedWindow(aura::Window* window) const { | 89 bool WorkspaceManager::IsManagedWindow(aura::Window* window) const { |
| 94 return window->type() == aura::client::WINDOW_TYPE_NORMAL && | 90 return window->type() == aura::client::WINDOW_TYPE_NORMAL && |
| 95 !window->transient_parent(); | 91 !window->transient_parent(); |
| 96 } | 92 } |
| 97 | 93 |
| 98 bool WorkspaceManager::ShouldMaximize(aura::Window* window) const { | |
| 99 return !window->GetProperty(aura::client::kShowStateKey) && | |
| 100 open_new_windows_maximized_ && | |
| 101 contents_view_->bounds().width() < kOpenMaximizedThreshold; | |
| 102 } | |
| 103 | |
| 104 void WorkspaceManager::AddWindow(aura::Window* window) { | 94 void WorkspaceManager::AddWindow(aura::Window* window) { |
| 105 DCHECK(IsManagedWindow(window)); | 95 DCHECK(IsManagedWindow(window)); |
| 106 | 96 |
| 107 Workspace* current_workspace = FindBy(window); | 97 Workspace* current_workspace = FindBy(window); |
| 108 if (current_workspace) { | 98 if (current_workspace) { |
| 109 // Already know about this window. Make sure the workspace is active. | 99 // Already know about this window. Make sure the workspace is active. |
| 110 if (active_workspace_ != current_workspace) { | 100 if (active_workspace_ != current_workspace) { |
| 111 if (active_workspace_) | 101 if (active_workspace_) |
| 112 window->layer()->GetAnimator()->StopAnimating(); | 102 window->layer()->GetAnimator()->StopAnimating(); |
| 113 current_workspace->Activate(); | 103 current_workspace->Activate(); |
| 114 } | 104 } |
| 115 return; | 105 return; |
| 116 } | 106 } |
| 117 | 107 |
| 118 if (!wm::IsWindowMaximized(window) && !wm::IsWindowFullscreen(window)) { | 108 if (!wm::IsWindowMaximized(window) && !wm::IsWindowFullscreen(window)) { |
| 119 SetRestoreBounds(window, window->bounds()); | 109 SetRestoreBounds(window, window->bounds()); |
| 120 } | 110 } |
| 121 | 111 |
| 122 if (!window->GetProperty(aura::client::kShowStateKey)) { | 112 if (!window->GetProperty(aura::client::kShowStateKey)) |
| 123 if (ShouldMaximize(window)) { | 113 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); |
| 124 window->SetProperty(aura::client::kShowStateKey, | |
| 125 ui::SHOW_STATE_MAXIMIZED); | |
| 126 } else { | |
| 127 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); | |
| 128 } | |
| 129 } | |
| 130 | 114 |
| 131 if (wm::IsWindowMaximized(window) || wm::IsWindowFullscreen(window)) { | 115 if (wm::IsWindowMaximized(window) || wm::IsWindowFullscreen(window)) { |
| 132 SetFullScreenOrMaximizedBounds(window); | 116 SetFullScreenOrMaximizedBounds(window); |
| 133 } else { | 117 } else { |
| 134 if (grid_size_ > 1) | 118 if (grid_size_ > 1) |
| 135 SetWindowBounds(window, AlignBoundsToGrid(window->GetTargetBounds())); | 119 SetWindowBounds(window, AlignBoundsToGrid(window->GetTargetBounds())); |
| 136 } | 120 } |
| 137 | 121 |
| 138 // Add the observer after we change the state in anyway. | 122 // Add the observer after we change the state in anyway. |
| 139 window->AddObserver(this); | 123 window->AddObserver(this); |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 if (type == Workspace::TYPE_MAXIMIZED) | 400 if (type == Workspace::TYPE_MAXIMIZED) |
| 417 workspace = new MaximizedWorkspace(this); | 401 workspace = new MaximizedWorkspace(this); |
| 418 else | 402 else |
| 419 workspace = new ManagedWorkspace(this); | 403 workspace = new ManagedWorkspace(this); |
| 420 AddWorkspace(workspace); | 404 AddWorkspace(workspace); |
| 421 return workspace; | 405 return workspace; |
| 422 } | 406 } |
| 423 | 407 |
| 424 } // namespace internal | 408 } // namespace internal |
| 425 } // namespace ash | 409 } // namespace ash |
| OLD | NEW |