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

Side by Side Diff: ash/root_window_controller.cc

Issue 2871813002: Converts remaining usage of WmLayoutManager to aura::LayoutManager (Closed)
Patch Set: cleanup Created 3 years, 7 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
« no previous file with comments | « ash/root_window_controller.h ('k') | ash/root_window_controller_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/root_window_controller.h" 5 #include "ash/root_window_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <queue> 8 #include <queue>
9 #include <vector> 9 #include <vector>
10 10
11 #include "ash/ash_constants.h" 11 #include "ash/ash_constants.h"
12 #include "ash/ash_switches.h" 12 #include "ash/ash_switches.h"
13 #include "ash/ash_touch_exploration_manager_chromeos.h" 13 #include "ash/ash_touch_exploration_manager_chromeos.h"
14 #include "ash/aura/aura_layout_manager_adapter.h"
15 #include "ash/focus_cycler.h" 14 #include "ash/focus_cycler.h"
16 #include "ash/high_contrast/high_contrast_controller.h" 15 #include "ash/high_contrast/high_contrast_controller.h"
17 #include "ash/host/ash_window_tree_host.h" 16 #include "ash/host/ash_window_tree_host.h"
18 #include "ash/login_status.h" 17 #include "ash/login_status.h"
19 #include "ash/public/cpp/config.h" 18 #include "ash/public/cpp/config.h"
20 #include "ash/public/cpp/shelf_types.h" 19 #include "ash/public/cpp/shelf_types.h"
21 #include "ash/public/cpp/shell_window_ids.h" 20 #include "ash/public/cpp/shell_window_ids.h"
22 #include "ash/root_window_settings.h" 21 #include "ash/root_window_settings.h"
23 #include "ash/screen_util.h" 22 #include "ash/screen_util.h"
24 #include "ash/session/session_controller.h" 23 #include "ash/session/session_controller.h"
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 for (int id : container_ids) { 226 for (int id : container_ids) {
228 aura::Window* src_container = src->GetChildById(id); 227 aura::Window* src_container = src->GetChildById(id);
229 aura::Window* dst_container = dst->GetChildById(id); 228 aura::Window* dst_container = dst->GetChildById(id);
230 while (!src_container->children().empty()) { 229 while (!src_container->children().empty()) {
231 // Restart iteration from the source container windows each time as they 230 // Restart iteration from the source container windows each time as they
232 // may change as a result of moving other windows. 231 // may change as a result of moving other windows.
233 const aura::Window::Windows& src_container_children = 232 const aura::Window::Windows& src_container_children =
234 src_container->children(); 233 src_container->children();
235 auto iter = src_container_children.begin(); 234 auto iter = src_container_children.begin();
236 while (iter != src_container_children.end() && 235 while (iter != src_container_children.end() &&
237 SystemModalContainerLayoutManager::IsModalBackground( 236 SystemModalContainerLayoutManager::IsModalBackground(*iter)) {
238 WmWindow::Get(*iter))) {
239 ++iter; 237 ++iter;
240 } 238 }
241 // If the entire window list is modal background windows then stop. 239 // If the entire window list is modal background windows then stop.
242 if (iter == src_container_children.end()) 240 if (iter == src_container_children.end())
243 break; 241 break;
244 ReparentWindow(*iter, dst_container); 242 ReparentWindow(*iter, dst_container);
245 } 243 }
246 } 244 }
247 } 245 }
248 246
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 Shell::Get()->NotifyShelfCreatedForRootWindow(WmWindow::Get(GetRootWindow())); 375 Shell::Get()->NotifyShelfCreatedForRootWindow(WmWindow::Get(GetRootWindow()));
378 376
379 wm_shelf_->shelf_widget()->PostCreateShelf(); 377 wm_shelf_->shelf_widget()->PostCreateShelf();
380 } 378 }
381 379
382 ShelfLayoutManager* RootWindowController::GetShelfLayoutManager() { 380 ShelfLayoutManager* RootWindowController::GetShelfLayoutManager() {
383 return wm_shelf_->shelf_layout_manager(); 381 return wm_shelf_->shelf_layout_manager();
384 } 382 }
385 383
386 SystemModalContainerLayoutManager* 384 SystemModalContainerLayoutManager*
387 RootWindowController::GetSystemModalLayoutManager(WmWindow* window) { 385 RootWindowController::GetSystemModalLayoutManager(aura::Window* window) {
388 WmWindow* modal_container = nullptr; 386 aura::Window* modal_container = nullptr;
389 if (window) { 387 if (window) {
390 aura::Window* window_container = 388 aura::Window* window_container = wm::GetContainerForWindow(window);
391 wm::GetContainerForWindow(window->aura_window());
392 if (window_container && 389 if (window_container &&
393 window_container->id() >= kShellWindowId_LockScreenContainer) { 390 window_container->id() >= kShellWindowId_LockScreenContainer) {
394 modal_container = GetWmContainer(kShellWindowId_LockSystemModalContainer); 391 modal_container = GetContainer(kShellWindowId_LockSystemModalContainer);
395 } else { 392 } else {
396 modal_container = GetWmContainer(kShellWindowId_SystemModalContainer); 393 modal_container = GetContainer(kShellWindowId_SystemModalContainer);
397 } 394 }
398 } else { 395 } else {
399 int modal_window_id = 396 int modal_window_id =
400 Shell::Get()->session_controller()->IsUserSessionBlocked() 397 Shell::Get()->session_controller()->IsUserSessionBlocked()
401 ? kShellWindowId_LockSystemModalContainer 398 ? kShellWindowId_LockSystemModalContainer
402 : kShellWindowId_SystemModalContainer; 399 : kShellWindowId_SystemModalContainer;
403 modal_container = GetWmContainer(modal_window_id); 400 modal_container = GetContainer(modal_window_id);
404 } 401 }
405 return modal_container ? static_cast<SystemModalContainerLayoutManager*>( 402 return modal_container ? static_cast<SystemModalContainerLayoutManager*>(
406 modal_container->GetLayoutManager()) 403 modal_container->layout_manager())
407 : nullptr; 404 : nullptr;
408 } 405 }
409 406
410 StatusAreaWidget* RootWindowController::GetStatusAreaWidget() { 407 StatusAreaWidget* RootWindowController::GetStatusAreaWidget() {
411 ShelfWidget* shelf_widget = wm_shelf_->shelf_widget(); 408 ShelfWidget* shelf_widget = wm_shelf_->shelf_widget();
412 return shelf_widget ? shelf_widget->status_area_widget() : nullptr; 409 return shelf_widget ? shelf_widget->status_area_widget() : nullptr;
413 } 410 }
414 411
415 SystemTray* RootWindowController::GetSystemTray() { 412 SystemTray* RootWindowController::GetSystemTray() {
416 // We assume in throughout the code that this will not return NULL. If code 413 // We assume in throughout the code that this will not return NULL. If code
(...skipping 17 matching lines...) Expand all
434 if (Shell::Get()->session_controller()->IsUserSessionBlocked()) { 431 if (Shell::Get()->session_controller()->IsUserSessionBlocked()) {
435 blocking_container = 432 blocking_container =
436 GetContainer(kShellWindowId_LockScreenContainersContainer); 433 GetContainer(kShellWindowId_LockScreenContainersContainer);
437 modal_container_id = kShellWindowId_LockSystemModalContainer; 434 modal_container_id = kShellWindowId_LockSystemModalContainer;
438 } else { 435 } else {
439 modal_container_id = kShellWindowId_SystemModalContainer; 436 modal_container_id = kShellWindowId_SystemModalContainer;
440 } 437 }
441 aura::Window* modal_container = GetContainer(modal_container_id); 438 aura::Window* modal_container = GetContainer(modal_container_id);
442 SystemModalContainerLayoutManager* modal_layout_manager = nullptr; 439 SystemModalContainerLayoutManager* modal_layout_manager = nullptr;
443 modal_layout_manager = static_cast<SystemModalContainerLayoutManager*>( 440 modal_layout_manager = static_cast<SystemModalContainerLayoutManager*>(
444 WmWindow::Get(modal_container)->GetLayoutManager()); 441 modal_container->layout_manager());
445 442
446 if (modal_layout_manager->has_window_dimmer()) 443 if (modal_layout_manager->has_window_dimmer())
447 blocking_container = modal_container; 444 blocking_container = modal_container;
448 else 445 else
449 modal_container = nullptr; // Don't check modal dialogs. 446 modal_container = nullptr; // Don't check modal dialogs.
450 447
451 // In normal session. 448 // In normal session.
452 if (!blocking_container) 449 if (!blocking_container)
453 return true; 450 return true;
454 451
455 if (!IsWindowAboveContainer(window, blocking_container)) 452 if (!IsWindowAboveContainer(window, blocking_container))
456 return false; 453 return false;
457 454
458 // If the window is in the target modal container, only allow the top most 455 // If the window is in the target modal container, only allow the top most
459 // one. 456 // one.
460 if (modal_container && modal_container->Contains(window)) 457 if (modal_container && modal_container->Contains(window))
461 return modal_layout_manager->IsPartOfActiveModalWindow( 458 return modal_layout_manager->IsPartOfActiveModalWindow(window);
462 WmWindow::Get(window));
463 459
464 return true; 460 return true;
465 } 461 }
466 462
467 WmWindow* RootWindowController::FindEventTarget( 463 WmWindow* RootWindowController::FindEventTarget(
468 const gfx::Point& location_in_screen) { 464 const gfx::Point& location_in_screen) {
469 gfx::Point location_in_root(location_in_screen); 465 gfx::Point location_in_root(location_in_screen);
470 aura::Window* root_window = GetRootWindow(); 466 aura::Window* root_window = GetRootWindow();
471 ::wm::ConvertPointFromScreen(root_window, &location_in_root); 467 ::wm::ConvertPointFromScreen(root_window, &location_in_root);
472 ui::MouseEvent test_event(ui::ET_MOUSE_MOVED, location_in_root, 468 ui::MouseEvent test_event(ui::ET_MOUSE_MOVED, location_in_root,
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 return wm::GetWindowForFullscreenMode(GetRootWindow()); 635 return wm::GetWindowForFullscreenMode(GetRootWindow());
640 } 636 }
641 637
642 void RootWindowController::ActivateKeyboard( 638 void RootWindowController::ActivateKeyboard(
643 keyboard::KeyboardController* keyboard_controller) { 639 keyboard::KeyboardController* keyboard_controller) {
644 if (!keyboard::IsKeyboardEnabled() || 640 if (!keyboard::IsKeyboardEnabled() ||
645 GetContainer(kShellWindowId_VirtualKeyboardContainer)) { 641 GetContainer(kShellWindowId_VirtualKeyboardContainer)) {
646 return; 642 return;
647 } 643 }
648 DCHECK(keyboard_controller); 644 DCHECK(keyboard_controller);
649 Shell::Get()->NotifyVirtualKeyboardActivated(true, 645 Shell::Get()->NotifyVirtualKeyboardActivated(true, GetRootWindow());
650 WmWindow::Get(GetRootWindow()));
651 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer); 646 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer);
652 DCHECK(parent); 647 DCHECK(parent);
653 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow(); 648 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow();
654 keyboard_container->set_id(kShellWindowId_VirtualKeyboardContainer); 649 keyboard_container->set_id(kShellWindowId_VirtualKeyboardContainer);
655 parent->AddChild(keyboard_container); 650 parent->AddChild(keyboard_container);
656 } 651 }
657 652
658 void RootWindowController::DeactivateKeyboard( 653 void RootWindowController::DeactivateKeyboard(
659 keyboard::KeyboardController* keyboard_controller) { 654 keyboard::KeyboardController* keyboard_controller) {
660 if (!keyboard_controller || 655 if (!keyboard_controller ||
661 !keyboard_controller->keyboard_container_initialized()) { 656 !keyboard_controller->keyboard_container_initialized()) {
662 return; 657 return;
663 } 658 }
664 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow(); 659 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow();
665 if (keyboard_container->GetRootWindow() == GetRootWindow()) { 660 if (keyboard_container->GetRootWindow() == GetRootWindow()) {
666 aura::Window* parent = 661 aura::Window* parent =
667 GetContainer(kShellWindowId_ImeWindowParentContainer); 662 GetContainer(kShellWindowId_ImeWindowParentContainer);
668 DCHECK(parent); 663 DCHECK(parent);
669 // Virtual keyboard may be deactivated while still showing, hide the 664 // Virtual keyboard may be deactivated while still showing, hide the
670 // keyboard before removing it from view hierarchy. 665 // keyboard before removing it from view hierarchy.
671 keyboard_controller->HideKeyboard( 666 keyboard_controller->HideKeyboard(
672 keyboard::KeyboardController::HIDE_REASON_AUTOMATIC); 667 keyboard::KeyboardController::HIDE_REASON_AUTOMATIC);
673 parent->RemoveChild(keyboard_container); 668 parent->RemoveChild(keyboard_container);
674 Shell::Get()->NotifyVirtualKeyboardActivated( 669 Shell::Get()->NotifyVirtualKeyboardActivated(false, GetRootWindow());
675 false, WmWindow::Get(GetRootWindow()));
676 } 670 }
677 } 671 }
678 672
679 bool RootWindowController::IsVirtualKeyboardWindow(aura::Window* window) { 673 bool RootWindowController::IsVirtualKeyboardWindow(aura::Window* window) {
680 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer); 674 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer);
681 return parent ? parent->Contains(window) : false; 675 return parent ? parent->Contains(window) : false;
682 } 676 }
683 677
684 void RootWindowController::SetTouchAccessibilityAnchorPoint( 678 void RootWindowController::SetTouchAccessibilityAnchorPoint(
685 const gfx::Point& anchor_point) { 679 const gfx::Point& anchor_point) {
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 Shell::GetAshConfig() != Config::MASH) { 782 Shell::GetAshConfig() != Config::MASH) {
789 touch_exploration_manager_.reset(new AshTouchExplorationManager(this)); 783 touch_exploration_manager_.reset(new AshTouchExplorationManager(this));
790 } 784 }
791 } 785 }
792 786
793 void RootWindowController::InitLayoutManagers() { 787 void RootWindowController::InitLayoutManagers() {
794 // Create the shelf and status area widgets. 788 // Create the shelf and status area widgets.
795 DCHECK(!wm_shelf_->shelf_widget()); 789 DCHECK(!wm_shelf_->shelf_widget());
796 GetShelf()->CreateShelfWidget(GetWindow()); 790 GetShelf()->CreateShelfWidget(GetWindow());
797 791
798 WmWindow* root = GetWindow(); 792 aura::Window* root = GetRootWindow();
799 root_window_layout_manager_ = new wm::RootWindowLayoutManager(root); 793 root_window_layout_manager_ = new wm::RootWindowLayoutManager(root);
800 root->SetLayoutManager(base::WrapUnique(root_window_layout_manager_)); 794 root->SetLayoutManager(root_window_layout_manager_);
801 795
802 aura::Window* default_container = 796 aura::Window* default_container =
803 GetContainer(kShellWindowId_DefaultContainer); 797 GetContainer(kShellWindowId_DefaultContainer);
804 // Installs WorkspaceLayoutManager on |default_container|. 798 // Installs WorkspaceLayoutManager on |default_container|.
805 workspace_controller_.reset(new WorkspaceController(default_container)); 799 workspace_controller_.reset(new WorkspaceController(default_container));
806 800
807 WmWindow* modal_container = 801 aura::Window* modal_container =
808 GetWmContainer(kShellWindowId_SystemModalContainer); 802 GetContainer(kShellWindowId_SystemModalContainer);
809 DCHECK(modal_container);
810 modal_container->SetLayoutManager( 803 modal_container->SetLayoutManager(
811 base::MakeUnique<SystemModalContainerLayoutManager>(modal_container)); 804 new SystemModalContainerLayoutManager(modal_container));
812 805
813 WmWindow* lock_modal_container = 806 aura::Window* lock_modal_container =
814 GetWmContainer(kShellWindowId_LockSystemModalContainer); 807 GetContainer(kShellWindowId_LockSystemModalContainer);
815 DCHECK(lock_modal_container); 808 DCHECK(lock_modal_container);
816 lock_modal_container->SetLayoutManager( 809 lock_modal_container->SetLayoutManager(
817 base::MakeUnique<SystemModalContainerLayoutManager>( 810 new SystemModalContainerLayoutManager(lock_modal_container));
818 lock_modal_container));
819 811
820 WmWindow* lock_container = GetWmContainer(kShellWindowId_LockScreenContainer); 812 aura::Window* lock_container =
813 GetContainer(kShellWindowId_LockScreenContainer);
821 DCHECK(lock_container); 814 DCHECK(lock_container);
822 lock_container->SetLayoutManager( 815 lock_container->SetLayoutManager(new LockLayoutManager(lock_container));
823 base::MakeUnique<LockLayoutManager>(lock_container));
824 816
825 WmWindow* always_on_top_container = 817 WmWindow* always_on_top_container =
826 GetWmContainer(kShellWindowId_AlwaysOnTopContainer); 818 GetWmContainer(kShellWindowId_AlwaysOnTopContainer);
827 DCHECK(always_on_top_container); 819 DCHECK(always_on_top_container);
828 always_on_top_controller_ = 820 always_on_top_controller_ =
829 base::MakeUnique<AlwaysOnTopController>(always_on_top_container); 821 base::MakeUnique<AlwaysOnTopController>(always_on_top_container);
830 822
831 // Create Panel layout manager 823 // Create Panel layout manager
832 WmWindow* wm_panel_container = GetWmContainer(kShellWindowId_PanelContainer); 824 WmWindow* wm_panel_container = GetWmContainer(kShellWindowId_PanelContainer);
833 panel_layout_manager_ = new PanelLayoutManager(wm_panel_container); 825 panel_layout_manager_ = new PanelLayoutManager(wm_panel_container);
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 EnableTouchHudProjection(); 1097 EnableTouchHudProjection();
1106 else 1098 else
1107 DisableTouchHudProjection(); 1099 DisableTouchHudProjection();
1108 } 1100 }
1109 1101
1110 RootWindowController* GetRootWindowController(const aura::Window* root_window) { 1102 RootWindowController* GetRootWindowController(const aura::Window* root_window) {
1111 return root_window ? GetRootWindowSettings(root_window)->controller : nullptr; 1103 return root_window ? GetRootWindowSettings(root_window)->controller : nullptr;
1112 } 1104 }
1113 1105
1114 } // namespace ash 1106 } // namespace ash
OLDNEW
« no previous file with comments | « ash/root_window_controller.h ('k') | ash/root_window_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698