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

Side by Side Diff: athena/wm/window_manager_impl.cc

Issue 480293003: Adding functions to the window_list_provider for accessing the activities window list (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moved Window observer from ResourceManager to WindowListProvider Created 6 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "athena/wm/window_manager_impl.h" 5 #include "athena/wm/window_manager_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "athena/common/container_priorities.h" 9 #include "athena/common/container_priorities.h"
10 #include "athena/screen/public/screen_manager.h" 10 #include "athena/screen/public/screen_manager.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 }; 61 };
62 62
63 AthenaContainerLayoutManager::AthenaContainerLayoutManager() { 63 AthenaContainerLayoutManager::AthenaContainerLayoutManager() {
64 } 64 }
65 65
66 AthenaContainerLayoutManager::~AthenaContainerLayoutManager() { 66 AthenaContainerLayoutManager::~AthenaContainerLayoutManager() {
67 } 67 }
68 68
69 void AthenaContainerLayoutManager::OnWindowResized() { 69 void AthenaContainerLayoutManager::OnWindowResized() {
70 // Resize all the existing windows. 70 // Resize all the existing windows.
71 aura::Window::Windows list = instance->window_list_provider_->GetWindowList(); 71 aura::Window::Windows list =
72 instance->window_list_provider_->GetCurrentWindowList();
72 const gfx::Size work_area = 73 const gfx::Size work_area =
73 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area().size(); 74 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area().size();
74 bool is_splitview = instance->split_view_controller_->IsSplitViewModeActive(); 75 bool is_splitview = instance->split_view_controller_->IsSplitViewModeActive();
75 gfx::Size split_size; 76 gfx::Size split_size;
76 if (is_splitview) { 77 if (is_splitview) {
77 CHECK(instance->split_view_controller_->left_window()); 78 CHECK(instance->split_view_controller_->left_window());
78 split_size = 79 split_size =
79 instance->split_view_controller_->left_window()->bounds().size(); 80 instance->split_view_controller_->left_window()->bounds().size();
80 } 81 }
81 82
82 for (aura::Window::Windows::const_iterator iter = list.begin(); 83 for (aura::Window::Windows::const_iterator iter = list.begin();
83 iter != list.end(); 84 iter != list.end();
84 ++iter) { 85 ++iter) {
85 aura::Window* window = *iter; 86 aura::Window* window = *iter;
86 if (is_splitview) { 87 if (is_splitview) {
87 if (window == instance->split_view_controller_->left_window()) 88 if (window == instance->split_view_controller_->left_window())
88 window->SetBounds(gfx::Rect(split_size)); 89 window->SetBounds(gfx::Rect(split_size));
89 else if (window == instance->split_view_controller_->right_window()) 90 else if (window == instance->split_view_controller_->right_window())
90 window->SetBounds( 91 window->SetBounds(
91 gfx::Rect(gfx::Point(split_size.width(), 0), split_size)); 92 gfx::Rect(gfx::Point(split_size.width(), 0), split_size));
92 else 93 else
93 window->SetBounds(gfx::Rect(work_area)); 94 window->SetBounds(gfx::Rect(work_area));
94 } else { 95 } else {
95 window->SetBounds(gfx::Rect(work_area)); 96 window->SetBounds(gfx::Rect(work_area));
96 } 97 }
97 } 98 }
98 } 99 }
99 100
100 void AthenaContainerLayoutManager::OnWindowAddedToLayout(aura::Window* child) { 101 void AthenaContainerLayoutManager::OnWindowAddedToLayout(aura::Window* child) {
101 aura::Window::Windows list = instance->window_list_provider_->GetWindowList(); 102 aura::Window::Windows list =
103 instance->window_list_provider_->GetCurrentWindowList();
102 if (std::find(list.begin(), list.end(), child) == list.end()) 104 if (std::find(list.begin(), list.end(), child) == list.end())
103 return; 105 return;
104 if (instance->split_view_controller_->IsSplitViewModeActive()) { 106 if (instance->split_view_controller_->IsSplitViewModeActive()) {
105 instance->split_view_controller_->ReplaceWindow( 107 instance->split_view_controller_->ReplaceWindow(
106 instance->split_view_controller_->left_window(), child); 108 instance->split_view_controller_->left_window(), child);
107 } else { 109 } else {
108 gfx::Size size = 110 gfx::Size size =
109 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area().size(); 111 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area().size();
110 child->SetBounds(gfx::Rect(size)); 112 child->SetBounds(gfx::Rect(size));
111 } 113 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 void WindowManagerImpl::SetInOverview(bool active) { 179 void WindowManagerImpl::SetInOverview(bool active) {
178 bool in_overview = !!overview_; 180 bool in_overview = !!overview_;
179 if (active == in_overview) 181 if (active == in_overview)
180 return; 182 return;
181 183
182 bezel_controller_->set_left_right_delegate( 184 bezel_controller_->set_left_right_delegate(
183 active ? NULL : split_view_controller_.get()); 185 active ? NULL : split_view_controller_.get());
184 if (active) { 186 if (active) {
185 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnOverviewModeEnter()); 187 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnOverviewModeEnter());
186 188
187 // Re-stack all windows in the order defined by window_list_provider_. 189 // Note: The window_list_provider_ resembles the exact window list of the
188 aura::Window::Windows window_list = window_list_provider_->GetWindowList(); 190 // container, so no re-stacking is required before showing the OverviewMode.
189 aura::Window::Windows::iterator it;
190 for (it = window_list.begin(); it != window_list.end(); ++it)
191 container_->StackChildAtTop(*it);
192 overview_ = WindowOverviewMode::Create( 191 overview_ = WindowOverviewMode::Create(
193 container_.get(), window_list_provider_.get(), 192 container_.get(), window_list_provider_.get(),
194 split_view_controller_.get(), this); 193 split_view_controller_.get(), this);
195 } else { 194 } else {
196 overview_.reset(); 195 overview_.reset();
197 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnOverviewModeExit()); 196 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnOverviewModeExit());
198 } 197 }
199 } 198 }
200 199
201 void WindowManagerImpl::InstallAccelerators() { 200 void WindowManagerImpl::InstallAccelerators() {
(...skipping 12 matching lines...) Expand all
214 } 213 }
215 214
216 void WindowManagerImpl::RemoveObserver(WindowManagerObserver* observer) { 215 void WindowManagerImpl::RemoveObserver(WindowManagerObserver* observer) {
217 observers_.RemoveObserver(observer); 216 observers_.RemoveObserver(observer);
218 } 217 }
219 218
220 void WindowManagerImpl::ToggleSplitViewForTest() { 219 void WindowManagerImpl::ToggleSplitViewForTest() {
221 ToggleSplitview(); 220 ToggleSplitview();
222 } 221 }
223 222
223 WindowListProvider* WindowManagerImpl::GetWindowListProvider() {
224 return window_list_provider_.get();
225 }
226
224 void WindowManagerImpl::OnSelectWindow(aura::Window* window) { 227 void WindowManagerImpl::OnSelectWindow(aura::Window* window) {
225 if (split_view_controller_->IsSplitViewModeActive()) { 228 if (split_view_controller_->IsSplitViewModeActive()) {
226 split_view_controller_->DeactivateSplitMode(); 229 split_view_controller_->DeactivateSplitMode();
227 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeExit()); 230 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeExit());
228 } 231 }
229 wm::ActivateWindow(window); 232 wm::ActivateWindow(window);
230 SetInOverview(false); 233 SetInOverview(false);
231 // If |window| does not have the size of the work-area, then make sure it is 234 // If |window| does not have the size of the work-area, then make sure it is
232 // resized. 235 // resized.
233 const gfx::Size work_area = 236 const gfx::Size work_area =
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 void WindowManagerImpl::ToggleSplitview() { 295 void WindowManagerImpl::ToggleSplitview() {
293 // TODO(oshima): Figure out what to do. 296 // TODO(oshima): Figure out what to do.
294 if (IsOverviewModeActive()) 297 if (IsOverviewModeActive())
295 return; 298 return;
296 299
297 if (split_view_controller_->IsSplitViewModeActive()) { 300 if (split_view_controller_->IsSplitViewModeActive()) {
298 split_view_controller_->DeactivateSplitMode(); 301 split_view_controller_->DeactivateSplitMode();
299 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeExit()); 302 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeExit());
300 // Relayout so that windows are maximzied. 303 // Relayout so that windows are maximzied.
301 container_->layout_manager()->OnWindowResized(); 304 container_->layout_manager()->OnWindowResized();
302 } else if (window_list_provider_->GetWindowList().size() > 1) { 305 } else if (window_list_provider_->GetCurrentWindowList().size() > 1) {
303 FOR_EACH_OBSERVER(WindowManagerObserver, 306 FOR_EACH_OBSERVER(WindowManagerObserver,
304 observers_, 307 observers_,
305 OnSplitViewModeEnter()); 308 OnSplitViewModeEnter());
306 split_view_controller_->ActivateSplitMode(NULL, NULL); 309 split_view_controller_->ActivateSplitMode(NULL, NULL);
307 } 310 }
308 } 311 }
309 312
310 aura::Window* WindowManagerImpl::GetWindowBehind(aura::Window* window) { 313 aura::Window* WindowManagerImpl::GetWindowBehind(aura::Window* window) {
311 const aura::Window::Windows& windows = window_list_provider_->GetWindowList(); 314 const aura::Window::Windows& windows =
315 window_list_provider_->GetCurrentWindowList();
312 aura::Window::Windows::const_reverse_iterator iter = 316 aura::Window::Windows::const_reverse_iterator iter =
313 std::find(windows.rbegin(), windows.rend(), window); 317 std::find(windows.rbegin(), windows.rend(), window);
314 CHECK(iter != windows.rend()); 318 CHECK(iter != windows.rend());
315 ++iter; 319 ++iter;
316 aura::Window* behind = NULL; 320 aura::Window* behind = NULL;
317 if (iter != windows.rend()) 321 if (iter != windows.rend())
318 behind = *iter++; 322 behind = *iter++;
319 323
320 if (split_view_controller_->IsSplitViewModeActive()) { 324 if (split_view_controller_->IsSplitViewModeActive()) {
321 aura::Window* left = split_view_controller_->left_window(); 325 aura::Window* left = split_view_controller_->left_window();
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 DCHECK(!instance); 405 DCHECK(!instance);
402 } 406 }
403 407
404 // static 408 // static
405 WindowManager* WindowManager::GetInstance() { 409 WindowManager* WindowManager::GetInstance() {
406 DCHECK(instance); 410 DCHECK(instance);
407 return instance; 411 return instance;
408 } 412 }
409 413
410 } // namespace athena 414 } // namespace athena
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698