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

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

Issue 550043002: Keep the split view activities topmost in z-order in Athena (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
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 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 window->SetBounds(gfx::Rect(work_area)); 95 window->SetBounds(gfx::Rect(work_area));
96 } 96 }
97 } 97 }
98 } 98 }
99 99
100 void AthenaContainerLayoutManager::OnWindowAddedToLayout(aura::Window* child) { 100 void AthenaContainerLayoutManager::OnWindowAddedToLayout(aura::Window* child) {
101 aura::Window::Windows list = instance->window_list_provider_->GetWindowList(); 101 aura::Window::Windows list = instance->window_list_provider_->GetWindowList();
102 if (std::find(list.begin(), list.end(), child) == list.end()) 102 if (std::find(list.begin(), list.end(), child) == list.end())
103 return; 103 return;
104 if (instance->split_view_controller_->IsSplitViewModeActive()) { 104 if (instance->split_view_controller_->IsSplitViewModeActive()) {
105 child->Show();
106 wm::ActivateWindow(child);
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));
sadrul 2014/09/09 14:27:28 Where do we activate this new window in normal mod
pkotwicz 2014/09/09 17:06:28 In practice we activate this window in normal mode
111 } 113 }
112 } 114 }
113 115
114 void AthenaContainerLayoutManager::OnWillRemoveWindowFromLayout( 116 void AthenaContainerLayoutManager::OnWillRemoveWindowFromLayout(
115 aura::Window* child) { 117 aura::Window* child) {
116 } 118 }
117 119
118 void AthenaContainerLayoutManager::OnWindowRemovedFromLayout( 120 void AthenaContainerLayoutManager::OnWindowRemovedFromLayout(
119 aura::Window* child) { 121 aura::Window* child) {
120 } 122 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 } 169 }
168 170
169 void WindowManagerImpl::ToggleOverview() { 171 void WindowManagerImpl::ToggleOverview() {
170 SetInOverview(overview_.get() == NULL); 172 SetInOverview(overview_.get() == NULL);
171 } 173 }
172 174
173 bool WindowManagerImpl::IsOverviewModeActive() { 175 bool WindowManagerImpl::IsOverviewModeActive() {
174 return overview_; 176 return overview_;
175 } 177 }
176 178
179 void WindowManagerImpl::ToggleSplitView() {
180 // TODO(oshima): Figure out what to do.
181 if (IsOverviewModeActive())
182 return;
183
184 if (split_view_controller_->IsSplitViewModeActive()) {
185 split_view_controller_->DeactivateSplitMode();
186 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeExit());
187 // Relayout so that windows are maximzied.
188 container_->layout_manager()->OnWindowResized();
189 } else if (window_list_provider_->GetWindowList().size() > 1) {
190 FOR_EACH_OBSERVER(WindowManagerObserver,
191 observers_,
192 OnSplitViewModeEnter());
193 aura::Window* active_window =
194 window_list_provider_->GetWindowList().back();
195 wm::ActivateWindow(active_window);
196 split_view_controller_->ActivateSplitMode(active_window, NULL);
197 }
198 }
199
177 void WindowManagerImpl::SetInOverview(bool active) { 200 void WindowManagerImpl::SetInOverview(bool active) {
178 bool in_overview = !!overview_; 201 bool in_overview = !!overview_;
179 if (active == in_overview) 202 if (active == in_overview)
180 return; 203 return;
181 204
182 bezel_controller_->set_left_right_delegate( 205 bezel_controller_->set_left_right_delegate(
183 active ? NULL : split_view_controller_.get()); 206 active ? NULL : split_view_controller_.get());
184 if (active) { 207 if (active) {
185 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnOverviewModeEnter()); 208 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnOverviewModeEnter());
186 209
(...skipping 24 matching lines...) Expand all
211 234
212 void WindowManagerImpl::AddObserver(WindowManagerObserver* observer) { 235 void WindowManagerImpl::AddObserver(WindowManagerObserver* observer) {
213 observers_.AddObserver(observer); 236 observers_.AddObserver(observer);
214 } 237 }
215 238
216 void WindowManagerImpl::RemoveObserver(WindowManagerObserver* observer) { 239 void WindowManagerImpl::RemoveObserver(WindowManagerObserver* observer) {
217 observers_.RemoveObserver(observer); 240 observers_.RemoveObserver(observer);
218 } 241 }
219 242
220 void WindowManagerImpl::ToggleSplitViewForTest() { 243 void WindowManagerImpl::ToggleSplitViewForTest() {
221 ToggleSplitview(); 244 ToggleSplitView();
222 } 245 }
223 246
224 void WindowManagerImpl::OnSelectWindow(aura::Window* window) { 247 void WindowManagerImpl::OnSelectWindow(aura::Window* window) {
225 if (split_view_controller_->IsSplitViewModeActive()) { 248 if (split_view_controller_->IsSplitViewModeActive()) {
226 split_view_controller_->DeactivateSplitMode(); 249 split_view_controller_->DeactivateSplitMode();
227 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeExit()); 250 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeExit());
228 } 251 }
229 wm::ActivateWindow(window); 252 wm::ActivateWindow(window);
230 SetInOverview(false); 253 SetInOverview(false);
231 // If |window| does not have the size of the work-area, then make sure it is 254 // If |window| does not have the size of the work-area, then make sure it is
(...skipping 18 matching lines...) Expand all
250 desired_bounds, 273 desired_bounds,
251 gfx::Transform()))); 274 gfx::Transform())));
252 window->SetTransform(transform); 275 window->SetTransform(transform);
253 } 276 }
254 } 277 }
255 278
256 void WindowManagerImpl::OnSplitViewMode(aura::Window* left, 279 void WindowManagerImpl::OnSplitViewMode(aura::Window* left,
257 aura::Window* right) { 280 aura::Window* right) {
258 SetInOverview(false); 281 SetInOverview(false);
259 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeEnter()); 282 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeEnter());
283 if (right)
284 wm::ActivateWindow(right);
285 else
286 wm::ActivateWindow(left);
sadrul 2014/09/09 14:27:28 Both left and right can be NULL here.
pkotwicz 2014/09/09 17:06:28 In practice, either |left| or |right| must be acti
260 split_view_controller_->ActivateSplitMode(left, right); 287 split_view_controller_->ActivateSplitMode(left, right);
261 } 288 }
262 289
263 void WindowManagerImpl::OnWindowAdded(aura::Window* new_window) { 290 void WindowManagerImpl::OnWindowAdded(aura::Window* new_window) {
264 // TODO(oshima): Creating a new window should updates the ovewview mode 291 // TODO(oshima): Creating a new window should updates the ovewview mode
265 // instead of exitting. 292 // instead of exitting.
266 if (new_window->type() == ui::wm::WINDOW_TYPE_NORMAL) 293 if (new_window->type() == ui::wm::WINDOW_TYPE_NORMAL)
267 SetInOverview(false); 294 SetInOverview(false);
268 } 295 }
269 296
270 void WindowManagerImpl::OnWindowDestroying(aura::Window* window) { 297 void WindowManagerImpl::OnWindowDestroying(aura::Window* window) {
271 if (window == container_) 298 if (window == container_)
272 container_.reset(); 299 container_.reset();
273 } 300 }
274 301
275 bool WindowManagerImpl::IsCommandEnabled(int command_id) const { 302 bool WindowManagerImpl::IsCommandEnabled(int command_id) const {
276 return true; 303 return true;
277 } 304 }
278 305
279 bool WindowManagerImpl::OnAcceleratorFired(int command_id, 306 bool WindowManagerImpl::OnAcceleratorFired(int command_id,
280 const ui::Accelerator& accelerator) { 307 const ui::Accelerator& accelerator) {
281 switch (command_id) { 308 switch (command_id) {
282 case CMD_TOGGLE_OVERVIEW: 309 case CMD_TOGGLE_OVERVIEW:
283 ToggleOverview(); 310 ToggleOverview();
284 break; 311 break;
285 case CMD_TOGGLE_SPLIT_VIEW: 312 case CMD_TOGGLE_SPLIT_VIEW:
286 ToggleSplitview(); 313 ToggleSplitView();
287 break; 314 break;
288 } 315 }
289 return true; 316 return true;
290 } 317 }
291 318
292 void WindowManagerImpl::ToggleSplitview() {
293 // TODO(oshima): Figure out what to do.
294 if (IsOverviewModeActive())
295 return;
296
297 if (split_view_controller_->IsSplitViewModeActive()) {
298 split_view_controller_->DeactivateSplitMode();
299 FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeExit());
300 // Relayout so that windows are maximzied.
301 container_->layout_manager()->OnWindowResized();
302 } else if (window_list_provider_->GetWindowList().size() > 1) {
303 FOR_EACH_OBSERVER(WindowManagerObserver,
304 observers_,
305 OnSplitViewModeEnter());
306 split_view_controller_->ActivateSplitMode(NULL, NULL);
307 }
308 }
309
310 aura::Window* WindowManagerImpl::GetWindowBehind(aura::Window* window) { 319 aura::Window* WindowManagerImpl::GetWindowBehind(aura::Window* window) {
311 const aura::Window::Windows& windows = window_list_provider_->GetWindowList(); 320 const aura::Window::Windows& windows = window_list_provider_->GetWindowList();
312 aura::Window::Windows::const_reverse_iterator iter = 321 aura::Window::Windows::const_reverse_iterator iter =
313 std::find(windows.rbegin(), windows.rend(), window); 322 std::find(windows.rbegin(), windows.rend(), window);
314 CHECK(iter != windows.rend()); 323 CHECK(iter != windows.rend());
315 ++iter; 324 ++iter;
316 aura::Window* behind = NULL; 325 aura::Window* behind = NULL;
317 if (iter != windows.rend()) 326 if (iter != windows.rend())
318 behind = *iter++; 327 behind = *iter++;
319 328
(...skipping 29 matching lines...) Expand all
349 transform.Translate(dx, 0); 358 transform.Translate(dx, 0);
350 next_window->SetTransform(transform); 359 next_window->SetTransform(transform);
351 } 360 }
352 } 361 }
353 362
354 void WindowManagerImpl::OnTitleDragCompleted(aura::Window* window) { 363 void WindowManagerImpl::OnTitleDragCompleted(aura::Window* window) {
355 aura::Window* next_window = GetWindowBehind(window); 364 aura::Window* next_window = GetWindowBehind(window);
356 if (!next_window) 365 if (!next_window)
357 return; 366 return;
358 if (split_view_controller_->IsSplitViewModeActive()) { 367 if (split_view_controller_->IsSplitViewModeActive()) {
368 wm::ActivateWindow(next_window);
359 split_view_controller_->ReplaceWindow(window, next_window); 369 split_view_controller_->ReplaceWindow(window, next_window);
sadrul 2014/09/09 14:27:28 Can you explain why this order is important?
pkotwicz 2014/09/09 17:06:28 Order is important because I changed SplitViewCont
360 wm::ActivateWindow(next_window);
361 } else { 370 } else {
362 ui::ScopedLayerAnimationSettings 371 ui::ScopedLayerAnimationSettings
363 settings(next_window->layer()->GetAnimator()); 372 settings(next_window->layer()->GetAnimator());
364 settings.AddObserver(new ui::ClosureAnimationObserver( 373 settings.AddObserver(new ui::ClosureAnimationObserver(
365 base::Bind(&SetWindowState, 374 base::Bind(&SetWindowState,
366 base::Unretained(next_window), 375 base::Unretained(next_window),
367 window->bounds(), 376 window->bounds(),
368 gfx::Transform()))); 377 gfx::Transform())));
369 378
370 gfx::Transform transform; 379 gfx::Transform transform;
(...skipping 30 matching lines...) Expand all
401 DCHECK(!instance); 410 DCHECK(!instance);
402 } 411 }
403 412
404 // static 413 // static
405 WindowManager* WindowManager::GetInstance() { 414 WindowManager* WindowManager::GetInstance() {
406 DCHECK(instance); 415 DCHECK(instance);
407 return instance; 416 return instance;
408 } 417 }
409 418
410 } // namespace athena 419 } // namespace athena
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698