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

Side by Side Diff: ash/root_window_controller.cc

Issue 2700523004: Remove docked windows entirely in M59. (Closed)
Patch Set: Rebase Created 3 years, 10 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 (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_touch_exploration_manager_chromeos.h" 11 #include "ash/ash_touch_exploration_manager_chromeos.h"
12 #include "ash/aura/aura_layout_manager_adapter.h" 12 #include "ash/aura/aura_layout_manager_adapter.h"
13 #include "ash/common/ash_constants.h" 13 #include "ash/common/ash_constants.h"
14 #include "ash/common/ash_switches.h" 14 #include "ash/common/ash_switches.h"
15 #include "ash/common/focus_cycler.h" 15 #include "ash/common/focus_cycler.h"
16 #include "ash/common/login_status.h" 16 #include "ash/common/login_status.h"
17 #include "ash/common/session/session_state_delegate.h" 17 #include "ash/common/session/session_state_delegate.h"
18 #include "ash/common/shelf/shelf_delegate.h" 18 #include "ash/common/shelf/shelf_delegate.h"
19 #include "ash/common/shelf/shelf_layout_manager.h" 19 #include "ash/common/shelf/shelf_layout_manager.h"
20 #include "ash/common/shelf/shelf_widget.h" 20 #include "ash/common/shelf/shelf_widget.h"
21 #include "ash/common/shelf/wm_shelf.h" 21 #include "ash/common/shelf/wm_shelf.h"
22 #include "ash/common/shell_delegate.h" 22 #include "ash/common/shell_delegate.h"
23 #include "ash/common/system/status_area_layout_manager.h" 23 #include "ash/common/system/status_area_layout_manager.h"
24 #include "ash/common/system/status_area_widget.h" 24 #include "ash/common/system/status_area_widget.h"
25 #include "ash/common/system/tray/system_tray_delegate.h" 25 #include "ash/common/system/tray/system_tray_delegate.h"
26 #include "ash/common/wallpaper/wallpaper_delegate.h" 26 #include "ash/common/wallpaper/wallpaper_delegate.h"
27 #include "ash/common/wallpaper/wallpaper_widget_controller.h" 27 #include "ash/common/wallpaper/wallpaper_widget_controller.h"
28 #include "ash/common/wm/always_on_top_controller.h" 28 #include "ash/common/wm/always_on_top_controller.h"
29 #include "ash/common/wm/container_finder.h" 29 #include "ash/common/wm/container_finder.h"
30 #include "ash/common/wm/dock/docked_window_layout_manager.h"
31 #include "ash/common/wm/fullscreen_window_finder.h" 30 #include "ash/common/wm/fullscreen_window_finder.h"
32 #include "ash/common/wm/lock_layout_manager.h" 31 #include "ash/common/wm/lock_layout_manager.h"
33 #include "ash/common/wm/panels/panel_layout_manager.h" 32 #include "ash/common/wm/panels/panel_layout_manager.h"
34 #include "ash/common/wm/root_window_layout_manager.h" 33 #include "ash/common/wm/root_window_layout_manager.h"
35 #include "ash/common/wm/switchable_windows.h" 34 #include "ash/common/wm/switchable_windows.h"
36 #include "ash/common/wm/system_modal_container_layout_manager.h" 35 #include "ash/common/wm/system_modal_container_layout_manager.h"
37 #include "ash/common/wm/window_state.h" 36 #include "ash/common/wm/window_state.h"
38 #include "ash/common/wm/wm_screen_util.h" 37 #include "ash/common/wm/wm_screen_util.h"
39 #include "ash/common/wm/workspace/workspace_layout_manager.h" 38 #include "ash/common/wm/workspace/workspace_layout_manager.h"
40 #include "ash/common/wm/workspace_controller.h" 39 #include "ash/common/wm/workspace_controller.h"
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 } 163 }
165 164
166 // Reparents |window| to |new_parent|. 165 // Reparents |window| to |new_parent|.
167 // TODO(sky): This should take an aura::Window. http://crbug.com/671246. 166 // TODO(sky): This should take an aura::Window. http://crbug.com/671246.
168 void ReparentWindow(WmWindow* window, WmWindow* new_parent) { 167 void ReparentWindow(WmWindow* window, WmWindow* new_parent) {
169 const gfx::Size src_size = window->GetParent()->GetBounds().size(); 168 const gfx::Size src_size = window->GetParent()->GetBounds().size();
170 const gfx::Size dst_size = new_parent->GetBounds().size(); 169 const gfx::Size dst_size = new_parent->GetBounds().size();
171 // Update the restore bounds to make it relative to the display. 170 // Update the restore bounds to make it relative to the display.
172 wm::WindowState* state = window->GetWindowState(); 171 wm::WindowState* state = window->GetWindowState();
173 gfx::Rect restore_bounds; 172 gfx::Rect restore_bounds;
174 bool has_restore_bounds = state->HasRestoreBounds(); 173 const bool has_restore_bounds = state->HasRestoreBounds();
175 174
176 bool update_bounds = 175 const bool update_bounds = state->IsNormalOrSnapped() || state->IsMinimized();
177 (state->IsNormalOrSnapped() || state->IsMinimized()) &&
178 new_parent->GetShellWindowId() != kShellWindowId_DockedContainer;
179 gfx::Rect work_area_in_new_parent = 176 gfx::Rect work_area_in_new_parent =
180 wm::GetDisplayWorkAreaBoundsInParent(new_parent); 177 wm::GetDisplayWorkAreaBoundsInParent(new_parent);
181 178
182 gfx::Rect local_bounds; 179 gfx::Rect local_bounds;
183 if (update_bounds) { 180 if (update_bounds) {
184 local_bounds = state->window()->GetBounds(); 181 local_bounds = state->window()->GetBounds();
185 MoveOriginRelativeToSize(src_size, dst_size, &local_bounds); 182 MoveOriginRelativeToSize(src_size, dst_size, &local_bounds);
186 local_bounds.AdjustToFit(work_area_in_new_parent); 183 local_bounds.AdjustToFit(work_area_in_new_parent);
187 } 184 }
188 185
(...skipping 12 matching lines...) Expand all
201 if (has_restore_bounds) 198 if (has_restore_bounds)
202 state->SetRestoreBoundsInParent(restore_bounds); 199 state->SetRestoreBoundsInParent(restore_bounds);
203 } 200 }
204 201
205 // Reparents the appropriate set of windows from |src| to |dst|. 202 // Reparents the appropriate set of windows from |src| to |dst|.
206 // TODO(sky): This should take an aura::Window. http://crbug.com/671246. 203 // TODO(sky): This should take an aura::Window. http://crbug.com/671246.
207 void ReparentAllWindows(WmWindow* src, WmWindow* dst) { 204 void ReparentAllWindows(WmWindow* src, WmWindow* dst) {
208 // Set of windows to move. 205 // Set of windows to move.
209 const int kContainerIdsToMove[] = { 206 const int kContainerIdsToMove[] = {
210 kShellWindowId_DefaultContainer, 207 kShellWindowId_DefaultContainer,
211 kShellWindowId_DockedContainer,
212 kShellWindowId_PanelContainer, 208 kShellWindowId_PanelContainer,
213 kShellWindowId_AlwaysOnTopContainer, 209 kShellWindowId_AlwaysOnTopContainer,
214 kShellWindowId_SystemModalContainer, 210 kShellWindowId_SystemModalContainer,
215 kShellWindowId_LockSystemModalContainer, 211 kShellWindowId_LockSystemModalContainer,
216 kShellWindowId_UnparentedControlContainer, 212 kShellWindowId_UnparentedControlContainer,
217 kShellWindowId_OverlayContainer, 213 kShellWindowId_OverlayContainer,
218 }; 214 };
219 const int kExtraContainerIdsToMoveInUnifiedMode[] = { 215 const int kExtraContainerIdsToMoveInUnifiedMode[] = {
220 kShellWindowId_LockScreenContainer, 216 kShellWindowId_LockScreenContainer,
221 kShellWindowId_LockScreenWallpaperContainer, 217 kShellWindowId_LockScreenWallpaperContainer,
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 365
370 void RootWindowController::CreateShelfView() { 366 void RootWindowController::CreateShelfView() {
371 if (wm_shelf_->IsShelfInitialized()) 367 if (wm_shelf_->IsShelfInitialized())
372 return; 368 return;
373 wm_shelf_->CreateShelfView(); 369 wm_shelf_->CreateShelfView();
374 370
375 // TODO(jamescook): Pass |wm_shelf_| into the constructors for these layout 371 // TODO(jamescook): Pass |wm_shelf_| into the constructors for these layout
376 // managers. 372 // managers.
377 if (panel_layout_manager_) 373 if (panel_layout_manager_)
378 panel_layout_manager_->SetShelf(wm_shelf_.get()); 374 panel_layout_manager_->SetShelf(wm_shelf_.get());
379 if (docked_window_layout_manager_) {
380 docked_window_layout_manager_->SetShelf(wm_shelf_.get());
381 if (wm_shelf_->shelf_layout_manager())
382 docked_window_layout_manager_->AddObserver(
383 wm_shelf_->shelf_layout_manager());
384 }
385 375
386 // Notify shell observers that the shelf has been created. 376 // Notify shell observers that the shelf has been created.
387 // TODO(jamescook): Move this into WmShelf::InitializeShelf(). This will 377 // TODO(jamescook): Move this into WmShelf::InitializeShelf(). This will
388 // require changing AttachedPanelWidgetTargeter's access to WmShelf. 378 // require changing AttachedPanelWidgetTargeter's access to WmShelf.
389 WmShell::Get()->NotifyShelfCreatedForRootWindow( 379 WmShell::Get()->NotifyShelfCreatedForRootWindow(
390 WmWindow::Get(GetRootWindow())); 380 WmWindow::Get(GetRootWindow()));
391 381
392 wm_shelf_->shelf_widget()->PostCreateShelf(); 382 wm_shelf_->shelf_widget()->PostCreateShelf();
393 } 383 }
394 384
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 if (ash_host_) 555 if (ash_host_)
566 ash_host_->PrepareForShutdown(); 556 ash_host_->PrepareForShutdown();
567 557
568 system_wallpaper_.reset(); 558 system_wallpaper_.reset();
569 aura::client::SetScreenPositionClient(root_window, nullptr); 559 aura::client::SetScreenPositionClient(root_window, nullptr);
570 } 560 }
571 561
572 void RootWindowController::CloseChildWindows() { 562 void RootWindowController::CloseChildWindows() {
573 // NOTE: this may be called multiple times. 563 // NOTE: this may be called multiple times.
574 564
575 // Remove observer as deactivating keyboard causes
576 // docked_window_layout_manager() to fire notifications.
577 if (docked_window_layout_manager() && wm_shelf_->shelf_layout_manager()) {
578 docked_window_layout_manager()->RemoveObserver(
579 wm_shelf_->shelf_layout_manager());
580 }
581
582 // Deactivate keyboard container before closing child windows and shutting 565 // Deactivate keyboard container before closing child windows and shutting
583 // down associated layout managers. 566 // down associated layout managers.
584 DeactivateKeyboard(keyboard::KeyboardController::GetInstance()); 567 DeactivateKeyboard(keyboard::KeyboardController::GetInstance());
585 568
586 // |panel_layout_manager_| needs to be shut down before windows are destroyed. 569 // |panel_layout_manager_| needs to be shut down before windows are destroyed.
587 if (panel_layout_manager_) { 570 if (panel_layout_manager_) {
588 panel_layout_manager_->Shutdown(); 571 panel_layout_manager_->Shutdown();
589 panel_layout_manager_ = nullptr; 572 panel_layout_manager_ = nullptr;
590 } 573 }
591 574
592 // |docked_window_layout_manager_| needs to be shut down before windows are
593 // destroyed.
594 if (docked_window_layout_manager_) {
595 docked_window_layout_manager_->Shutdown();
596 docked_window_layout_manager_ = nullptr;
597 }
598
599 WmShelf* shelf = GetShelf(); 575 WmShelf* shelf = GetShelf();
600 shelf->ShutdownShelfWidget(); 576 shelf->ShutdownShelfWidget();
601 577
602 workspace_controller_.reset(); 578 workspace_controller_.reset();
603 579
604 // Explicitly destroy top level windows. We do this because such windows may 580 // Explicitly destroy top level windows. We do this because such windows may
605 // query the RootWindow for state. 581 // query the RootWindow for state.
606 aura::WindowTracker non_toplevel_windows; 582 aura::WindowTracker non_toplevel_windows;
607 WmWindow* root = GetWindow(); 583 WmWindow* root = GetWindow();
608 non_toplevel_windows.Add(root->aura_window()); 584 non_toplevel_windows.Add(root->aura_window());
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 644
669 void RootWindowController::ActivateKeyboard( 645 void RootWindowController::ActivateKeyboard(
670 keyboard::KeyboardController* keyboard_controller) { 646 keyboard::KeyboardController* keyboard_controller) {
671 if (!keyboard::IsKeyboardEnabled() || 647 if (!keyboard::IsKeyboardEnabled() ||
672 GetContainer(kShellWindowId_VirtualKeyboardContainer)) { 648 GetContainer(kShellWindowId_VirtualKeyboardContainer)) {
673 return; 649 return;
674 } 650 }
675 DCHECK(keyboard_controller); 651 DCHECK(keyboard_controller);
676 keyboard_controller->AddObserver(wm_shelf_->shelf_layout_manager()); 652 keyboard_controller->AddObserver(wm_shelf_->shelf_layout_manager());
677 keyboard_controller->AddObserver(panel_layout_manager()); 653 keyboard_controller->AddObserver(panel_layout_manager());
678 keyboard_controller->AddObserver(docked_window_layout_manager());
679 keyboard_controller->AddObserver(workspace_controller()->layout_manager()); 654 keyboard_controller->AddObserver(workspace_controller()->layout_manager());
680 keyboard_controller->AddObserver( 655 keyboard_controller->AddObserver(
681 always_on_top_controller_->GetLayoutManager()); 656 always_on_top_controller_->GetLayoutManager());
682 WmShell::Get()->NotifyVirtualKeyboardActivated(true); 657 WmShell::Get()->NotifyVirtualKeyboardActivated(true);
683 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer); 658 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer);
684 DCHECK(parent); 659 DCHECK(parent);
685 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow(); 660 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow();
686 keyboard_container->set_id(kShellWindowId_VirtualKeyboardContainer); 661 keyboard_container->set_id(kShellWindowId_VirtualKeyboardContainer);
687 parent->AddChild(keyboard_container); 662 parent->AddChild(keyboard_container);
688 } 663 }
689 664
690 void RootWindowController::DeactivateKeyboard( 665 void RootWindowController::DeactivateKeyboard(
691 keyboard::KeyboardController* keyboard_controller) { 666 keyboard::KeyboardController* keyboard_controller) {
692 if (!keyboard_controller || 667 if (!keyboard_controller ||
693 !keyboard_controller->keyboard_container_initialized()) { 668 !keyboard_controller->keyboard_container_initialized()) {
694 return; 669 return;
695 } 670 }
696 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow(); 671 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow();
697 if (keyboard_container->GetRootWindow() == GetRootWindow()) { 672 if (keyboard_container->GetRootWindow() == GetRootWindow()) {
698 aura::Window* parent = 673 aura::Window* parent =
699 GetContainer(kShellWindowId_ImeWindowParentContainer); 674 GetContainer(kShellWindowId_ImeWindowParentContainer);
700 DCHECK(parent); 675 DCHECK(parent);
701 // Virtual keyboard may be deactivated while still showing, hide the 676 // Virtual keyboard may be deactivated while still showing, hide the
702 // keyboard before removing it from view hierarchy. 677 // keyboard before removing it from view hierarchy.
703 keyboard_controller->HideKeyboard( 678 keyboard_controller->HideKeyboard(
704 keyboard::KeyboardController::HIDE_REASON_AUTOMATIC); 679 keyboard::KeyboardController::HIDE_REASON_AUTOMATIC);
705 parent->RemoveChild(keyboard_container); 680 parent->RemoveChild(keyboard_container);
706 keyboard_controller->RemoveObserver(wm_shelf_->shelf_layout_manager()); 681 keyboard_controller->RemoveObserver(wm_shelf_->shelf_layout_manager());
707 keyboard_controller->RemoveObserver(panel_layout_manager()); 682 keyboard_controller->RemoveObserver(panel_layout_manager());
708 keyboard_controller->RemoveObserver(docked_window_layout_manager());
709 keyboard_controller->RemoveObserver( 683 keyboard_controller->RemoveObserver(
710 workspace_controller()->layout_manager()); 684 workspace_controller()->layout_manager());
711 keyboard_controller->RemoveObserver( 685 keyboard_controller->RemoveObserver(
712 always_on_top_controller_->GetLayoutManager()); 686 always_on_top_controller_->GetLayoutManager());
713 WmShell::Get()->NotifyVirtualKeyboardActivated(false); 687 WmShell::Get()->NotifyVirtualKeyboardActivated(false);
714 } 688 }
715 } 689 }
716 690
717 bool RootWindowController::IsVirtualKeyboardWindow(aura::Window* window) { 691 bool RootWindowController::IsVirtualKeyboardWindow(aura::Window* window) {
718 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer); 692 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer);
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 DCHECK(lock_container); 833 DCHECK(lock_container);
860 lock_container->SetLayoutManager( 834 lock_container->SetLayoutManager(
861 base::MakeUnique<LockLayoutManager>(lock_container)); 835 base::MakeUnique<LockLayoutManager>(lock_container));
862 836
863 WmWindow* always_on_top_container = 837 WmWindow* always_on_top_container =
864 GetWmContainer(kShellWindowId_AlwaysOnTopContainer); 838 GetWmContainer(kShellWindowId_AlwaysOnTopContainer);
865 DCHECK(always_on_top_container); 839 DCHECK(always_on_top_container);
866 always_on_top_controller_ = 840 always_on_top_controller_ =
867 base::MakeUnique<AlwaysOnTopController>(always_on_top_container); 841 base::MakeUnique<AlwaysOnTopController>(always_on_top_container);
868 842
869 // Create Docked windows layout manager
870 WmWindow* docked_container = GetWmContainer(kShellWindowId_DockedContainer);
871 docked_window_layout_manager_ =
872 new DockedWindowLayoutManager(docked_container);
873 docked_container->SetLayoutManager(
874 base::WrapUnique(docked_window_layout_manager_));
875
876 // Create Panel layout manager 843 // Create Panel layout manager
877 WmWindow* wm_panel_container = GetWmContainer(kShellWindowId_PanelContainer); 844 WmWindow* wm_panel_container = GetWmContainer(kShellWindowId_PanelContainer);
878 panel_layout_manager_ = new PanelLayoutManager(wm_panel_container); 845 panel_layout_manager_ = new PanelLayoutManager(wm_panel_container);
879 wm_panel_container->SetLayoutManager(base::WrapUnique(panel_layout_manager_)); 846 wm_panel_container->SetLayoutManager(base::WrapUnique(panel_layout_manager_));
880 847
881 wm::WmSnapToPixelLayoutManager::InstallOnContainers(root); 848 wm::WmSnapToPixelLayoutManager::InstallOnContainers(root);
882 849
883 // Make it easier to resize windows that partially overlap the shelf. Must 850 // Make it easier to resize windows that partially overlap the shelf. Must
884 // occur after the ShelfLayoutManager is constructed by ShelfWidget. 851 // occur after the ShelfLayoutManager is constructed by ShelfWidget.
885 aura::Window* shelf_container = GetContainer(kShellWindowId_ShelfContainer); 852 aura::Window* shelf_container = GetContainer(kShellWindowId_ShelfContainer);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 default_container->SetChildrenUseExtendedHitRegion(); 922 default_container->SetChildrenUseExtendedHitRegion();
956 923
957 WmWindow* always_on_top_container = 924 WmWindow* always_on_top_container =
958 CreateContainer(kShellWindowId_AlwaysOnTopContainer, 925 CreateContainer(kShellWindowId_AlwaysOnTopContainer,
959 "AlwaysOnTopContainer", non_lock_screen_containers); 926 "AlwaysOnTopContainer", non_lock_screen_containers);
960 always_on_top_container->SetChildWindowVisibilityChangesAnimated(); 927 always_on_top_container->SetChildWindowVisibilityChangesAnimated();
961 always_on_top_container->SetSnapsChildrenToPhysicalPixelBoundary(); 928 always_on_top_container->SetSnapsChildrenToPhysicalPixelBoundary();
962 always_on_top_container->SetBoundsInScreenBehaviorForChildren( 929 always_on_top_container->SetBoundsInScreenBehaviorForChildren(
963 WmWindow::BoundsInScreenBehavior::USE_SCREEN_COORDINATES); 930 WmWindow::BoundsInScreenBehavior::USE_SCREEN_COORDINATES);
964 931
965 WmWindow* docked_container =
966 CreateContainer(kShellWindowId_DockedContainer, "DockedContainer",
967 non_lock_screen_containers);
968 docked_container->SetChildWindowVisibilityChangesAnimated();
969 docked_container->SetSnapsChildrenToPhysicalPixelBoundary();
970 docked_container->SetBoundsInScreenBehaviorForChildren(
971 WmWindow::BoundsInScreenBehavior::USE_SCREEN_COORDINATES);
972 docked_container->SetChildrenUseExtendedHitRegion();
973
974 WmWindow* shelf_container = 932 WmWindow* shelf_container =
975 CreateContainer(kShellWindowId_ShelfContainer, "ShelfContainer", 933 CreateContainer(kShellWindowId_ShelfContainer, "ShelfContainer",
976 non_lock_screen_containers); 934 non_lock_screen_containers);
977 shelf_container->SetSnapsChildrenToPhysicalPixelBoundary(); 935 shelf_container->SetSnapsChildrenToPhysicalPixelBoundary();
978 shelf_container->SetBoundsInScreenBehaviorForChildren( 936 shelf_container->SetBoundsInScreenBehaviorForChildren(
979 WmWindow::BoundsInScreenBehavior::USE_SCREEN_COORDINATES); 937 WmWindow::BoundsInScreenBehavior::USE_SCREEN_COORDINATES);
980 shelf_container->SetLockedToRoot(true); 938 shelf_container->SetLockedToRoot(true);
981 939
982 WmWindow* panel_container = 940 WmWindow* panel_container =
983 CreateContainer(kShellWindowId_PanelContainer, "PanelContainer", 941 CreateContainer(kShellWindowId_PanelContainer, "PanelContainer",
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1154 EnableTouchHudProjection(); 1112 EnableTouchHudProjection();
1155 else 1113 else
1156 DisableTouchHudProjection(); 1114 DisableTouchHudProjection();
1157 } 1115 }
1158 1116
1159 RootWindowController* GetRootWindowController(const aura::Window* root_window) { 1117 RootWindowController* GetRootWindowController(const aura::Window* root_window) {
1160 return root_window ? GetRootWindowSettings(root_window)->controller : nullptr; 1118 return root_window ? GetRootWindowSettings(root_window)->controller : nullptr;
1161 } 1119 }
1162 1120
1163 } // namespace ash 1121 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698