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

Side by Side Diff: ash/root_window_controller.cc

Issue 2700523004: Remove docked windows entirely in M59. (Closed)
Patch Set: Use panel in test 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 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 if (ash_host_) 556 if (ash_host_)
567 ash_host_->PrepareForShutdown(); 557 ash_host_->PrepareForShutdown();
568 558
569 system_wallpaper_.reset(); 559 system_wallpaper_.reset();
570 aura::client::SetScreenPositionClient(root_window, nullptr); 560 aura::client::SetScreenPositionClient(root_window, nullptr);
571 } 561 }
572 562
573 void RootWindowController::CloseChildWindows() { 563 void RootWindowController::CloseChildWindows() {
574 // NOTE: this may be called multiple times. 564 // NOTE: this may be called multiple times.
575 565
576 // Remove observer as deactivating keyboard causes
577 // docked_window_layout_manager() to fire notifications.
578 if (docked_window_layout_manager() && wm_shelf_->shelf_layout_manager()) {
579 docked_window_layout_manager()->RemoveObserver(
580 wm_shelf_->shelf_layout_manager());
581 }
582
583 // Deactivate keyboard container before closing child windows and shutting 566 // Deactivate keyboard container before closing child windows and shutting
584 // down associated layout managers. 567 // down associated layout managers.
585 DeactivateKeyboard(keyboard::KeyboardController::GetInstance()); 568 DeactivateKeyboard(keyboard::KeyboardController::GetInstance());
586 569
587 // |panel_layout_manager_| needs to be shut down before windows are destroyed. 570 // |panel_layout_manager_| needs to be shut down before windows are destroyed.
588 if (panel_layout_manager_) { 571 if (panel_layout_manager_) {
589 panel_layout_manager_->Shutdown(); 572 panel_layout_manager_->Shutdown();
590 panel_layout_manager_ = nullptr; 573 panel_layout_manager_ = nullptr;
591 } 574 }
592 575
593 // |docked_window_layout_manager_| needs to be shut down before windows are
594 // destroyed.
595 if (docked_window_layout_manager_) {
596 docked_window_layout_manager_->Shutdown();
597 docked_window_layout_manager_ = nullptr;
598 }
599
600 WmShelf* shelf = GetShelf(); 576 WmShelf* shelf = GetShelf();
601 shelf->ShutdownShelfWidget(); 577 shelf->ShutdownShelfWidget();
602 578
603 workspace_controller_.reset(); 579 workspace_controller_.reset();
604 580
605 // Explicitly destroy top level windows. We do this because such windows may 581 // Explicitly destroy top level windows. We do this because such windows may
606 // query the RootWindow for state. 582 // query the RootWindow for state.
607 aura::WindowTracker non_toplevel_windows; 583 aura::WindowTracker non_toplevel_windows;
608 WmWindow* root = GetWindow(); 584 WmWindow* root = GetWindow();
609 non_toplevel_windows.Add(root->aura_window()); 585 non_toplevel_windows.Add(root->aura_window());
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 645
670 void RootWindowController::ActivateKeyboard( 646 void RootWindowController::ActivateKeyboard(
671 keyboard::KeyboardController* keyboard_controller) { 647 keyboard::KeyboardController* keyboard_controller) {
672 if (!keyboard::IsKeyboardEnabled() || 648 if (!keyboard::IsKeyboardEnabled() ||
673 GetContainer(kShellWindowId_VirtualKeyboardContainer)) { 649 GetContainer(kShellWindowId_VirtualKeyboardContainer)) {
674 return; 650 return;
675 } 651 }
676 DCHECK(keyboard_controller); 652 DCHECK(keyboard_controller);
677 keyboard_controller->AddObserver(wm_shelf_->shelf_layout_manager()); 653 keyboard_controller->AddObserver(wm_shelf_->shelf_layout_manager());
678 keyboard_controller->AddObserver(panel_layout_manager()); 654 keyboard_controller->AddObserver(panel_layout_manager());
679 keyboard_controller->AddObserver(docked_window_layout_manager());
680 keyboard_controller->AddObserver(workspace_controller()->layout_manager()); 655 keyboard_controller->AddObserver(workspace_controller()->layout_manager());
681 keyboard_controller->AddObserver( 656 keyboard_controller->AddObserver(
682 always_on_top_controller_->GetLayoutManager()); 657 always_on_top_controller_->GetLayoutManager());
683 WmShell::Get()->NotifyVirtualKeyboardActivated(true); 658 WmShell::Get()->NotifyVirtualKeyboardActivated(true);
684 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer); 659 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer);
685 DCHECK(parent); 660 DCHECK(parent);
686 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow(); 661 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow();
687 keyboard_container->set_id(kShellWindowId_VirtualKeyboardContainer); 662 keyboard_container->set_id(kShellWindowId_VirtualKeyboardContainer);
688 parent->AddChild(keyboard_container); 663 parent->AddChild(keyboard_container);
689 } 664 }
690 665
691 void RootWindowController::DeactivateKeyboard( 666 void RootWindowController::DeactivateKeyboard(
692 keyboard::KeyboardController* keyboard_controller) { 667 keyboard::KeyboardController* keyboard_controller) {
693 if (!keyboard_controller || 668 if (!keyboard_controller ||
694 !keyboard_controller->keyboard_container_initialized()) { 669 !keyboard_controller->keyboard_container_initialized()) {
695 return; 670 return;
696 } 671 }
697 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow(); 672 aura::Window* keyboard_container = keyboard_controller->GetContainerWindow();
698 if (keyboard_container->GetRootWindow() == GetRootWindow()) { 673 if (keyboard_container->GetRootWindow() == GetRootWindow()) {
699 aura::Window* parent = 674 aura::Window* parent =
700 GetContainer(kShellWindowId_ImeWindowParentContainer); 675 GetContainer(kShellWindowId_ImeWindowParentContainer);
701 DCHECK(parent); 676 DCHECK(parent);
702 // Virtual keyboard may be deactivated while still showing, hide the 677 // Virtual keyboard may be deactivated while still showing, hide the
703 // keyboard before removing it from view hierarchy. 678 // keyboard before removing it from view hierarchy.
704 keyboard_controller->HideKeyboard( 679 keyboard_controller->HideKeyboard(
705 keyboard::KeyboardController::HIDE_REASON_AUTOMATIC); 680 keyboard::KeyboardController::HIDE_REASON_AUTOMATIC);
706 parent->RemoveChild(keyboard_container); 681 parent->RemoveChild(keyboard_container);
707 keyboard_controller->RemoveObserver(wm_shelf_->shelf_layout_manager()); 682 keyboard_controller->RemoveObserver(wm_shelf_->shelf_layout_manager());
708 keyboard_controller->RemoveObserver(panel_layout_manager()); 683 keyboard_controller->RemoveObserver(panel_layout_manager());
709 keyboard_controller->RemoveObserver(docked_window_layout_manager());
710 keyboard_controller->RemoveObserver( 684 keyboard_controller->RemoveObserver(
711 workspace_controller()->layout_manager()); 685 workspace_controller()->layout_manager());
712 keyboard_controller->RemoveObserver( 686 keyboard_controller->RemoveObserver(
713 always_on_top_controller_->GetLayoutManager()); 687 always_on_top_controller_->GetLayoutManager());
714 WmShell::Get()->NotifyVirtualKeyboardActivated(false); 688 WmShell::Get()->NotifyVirtualKeyboardActivated(false);
715 } 689 }
716 } 690 }
717 691
718 bool RootWindowController::IsVirtualKeyboardWindow(aura::Window* window) { 692 bool RootWindowController::IsVirtualKeyboardWindow(aura::Window* window) {
719 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer); 693 aura::Window* parent = GetContainer(kShellWindowId_ImeWindowParentContainer);
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 DCHECK(lock_container); 834 DCHECK(lock_container);
861 lock_container->SetLayoutManager( 835 lock_container->SetLayoutManager(
862 base::MakeUnique<LockLayoutManager>(lock_container)); 836 base::MakeUnique<LockLayoutManager>(lock_container));
863 837
864 WmWindow* always_on_top_container = 838 WmWindow* always_on_top_container =
865 GetWmContainer(kShellWindowId_AlwaysOnTopContainer); 839 GetWmContainer(kShellWindowId_AlwaysOnTopContainer);
866 DCHECK(always_on_top_container); 840 DCHECK(always_on_top_container);
867 always_on_top_controller_ = 841 always_on_top_controller_ =
868 base::MakeUnique<AlwaysOnTopController>(always_on_top_container); 842 base::MakeUnique<AlwaysOnTopController>(always_on_top_container);
869 843
870 // Create Docked windows layout manager
871 WmWindow* docked_container = GetWmContainer(kShellWindowId_DockedContainer);
872 docked_window_layout_manager_ =
873 new DockedWindowLayoutManager(docked_container);
874 docked_container->SetLayoutManager(
875 base::WrapUnique(docked_window_layout_manager_));
876
877 // Create Panel layout manager 844 // Create Panel layout manager
878 WmWindow* wm_panel_container = GetWmContainer(kShellWindowId_PanelContainer); 845 WmWindow* wm_panel_container = GetWmContainer(kShellWindowId_PanelContainer);
879 panel_layout_manager_ = new PanelLayoutManager(wm_panel_container); 846 panel_layout_manager_ = new PanelLayoutManager(wm_panel_container);
880 wm_panel_container->SetLayoutManager(base::WrapUnique(panel_layout_manager_)); 847 wm_panel_container->SetLayoutManager(base::WrapUnique(panel_layout_manager_));
881 848
882 wm::WmSnapToPixelLayoutManager::InstallOnContainers(root); 849 wm::WmSnapToPixelLayoutManager::InstallOnContainers(root);
883 850
884 // Make it easier to resize windows that partially overlap the shelf. Must 851 // Make it easier to resize windows that partially overlap the shelf. Must
885 // occur after the ShelfLayoutManager is constructed by ShelfWidget. 852 // occur after the ShelfLayoutManager is constructed by ShelfWidget.
886 aura::Window* shelf_container = GetContainer(kShellWindowId_ShelfContainer); 853 aura::Window* shelf_container = GetContainer(kShellWindowId_ShelfContainer);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 default_container->SetChildrenUseExtendedHitRegion(); 923 default_container->SetChildrenUseExtendedHitRegion();
957 924
958 WmWindow* always_on_top_container = 925 WmWindow* always_on_top_container =
959 CreateContainer(kShellWindowId_AlwaysOnTopContainer, 926 CreateContainer(kShellWindowId_AlwaysOnTopContainer,
960 "AlwaysOnTopContainer", non_lock_screen_containers); 927 "AlwaysOnTopContainer", non_lock_screen_containers);
961 always_on_top_container->SetChildWindowVisibilityChangesAnimated(); 928 always_on_top_container->SetChildWindowVisibilityChangesAnimated();
962 always_on_top_container->SetSnapsChildrenToPhysicalPixelBoundary(); 929 always_on_top_container->SetSnapsChildrenToPhysicalPixelBoundary();
963 always_on_top_container->SetBoundsInScreenBehaviorForChildren( 930 always_on_top_container->SetBoundsInScreenBehaviorForChildren(
964 WmWindow::BoundsInScreenBehavior::USE_SCREEN_COORDINATES); 931 WmWindow::BoundsInScreenBehavior::USE_SCREEN_COORDINATES);
965 932
966 WmWindow* docked_container =
967 CreateContainer(kShellWindowId_DockedContainer, "DockedContainer",
968 non_lock_screen_containers);
969 docked_container->SetChildWindowVisibilityChangesAnimated();
970 docked_container->SetSnapsChildrenToPhysicalPixelBoundary();
971 docked_container->SetBoundsInScreenBehaviorForChildren(
972 WmWindow::BoundsInScreenBehavior::USE_SCREEN_COORDINATES);
973 docked_container->SetChildrenUseExtendedHitRegion();
974
975 WmWindow* shelf_container = 933 WmWindow* shelf_container =
976 CreateContainer(kShellWindowId_ShelfContainer, "ShelfContainer", 934 CreateContainer(kShellWindowId_ShelfContainer, "ShelfContainer",
977 non_lock_screen_containers); 935 non_lock_screen_containers);
978 shelf_container->SetSnapsChildrenToPhysicalPixelBoundary(); 936 shelf_container->SetSnapsChildrenToPhysicalPixelBoundary();
979 shelf_container->SetBoundsInScreenBehaviorForChildren( 937 shelf_container->SetBoundsInScreenBehaviorForChildren(
980 WmWindow::BoundsInScreenBehavior::USE_SCREEN_COORDINATES); 938 WmWindow::BoundsInScreenBehavior::USE_SCREEN_COORDINATES);
981 shelf_container->SetLockedToRoot(true); 939 shelf_container->SetLockedToRoot(true);
982 940
983 WmWindow* panel_container = 941 WmWindow* panel_container =
984 CreateContainer(kShellWindowId_PanelContainer, "PanelContainer", 942 CreateContainer(kShellWindowId_PanelContainer, "PanelContainer",
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 EnableTouchHudProjection(); 1113 EnableTouchHudProjection();
1156 else 1114 else
1157 DisableTouchHudProjection(); 1115 DisableTouchHudProjection();
1158 } 1116 }
1159 1117
1160 RootWindowController* GetRootWindowController(const aura::Window* root_window) { 1118 RootWindowController* GetRootWindowController(const aura::Window* root_window) {
1161 return root_window ? GetRootWindowSettings(root_window)->controller : nullptr; 1119 return root_window ? GetRootWindowSettings(root_window)->controller : nullptr;
1162 } 1120 }
1163 1121
1164 } // namespace ash 1122 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698