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

Side by Side Diff: ash/root_window_controller.cc

Issue 2347493003: Moves RootWindowController::MoveWindowsTo to WmRootWindowController (Closed)
Patch Set: merge to trunk Created 4 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
« no previous file with comments | « ash/mus/bridge/wm_shell_mus.cc ('k') | no next file » | 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 <queue> 7 #include <queue>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ash/aura/aura_layout_manager_adapter.h" 10 #include "ash/aura/aura_layout_manager_adapter.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 namespace { 92 namespace {
93 93
94 #if defined(OS_CHROMEOS) 94 #if defined(OS_CHROMEOS)
95 // Duration for the animation that hides the boot splash screen, in 95 // Duration for the animation that hides the boot splash screen, in
96 // milliseconds. This should be short enough in relation to 96 // milliseconds. This should be short enough in relation to
97 // wm/window_animation.cc's brightness/grayscale fade animation that the login 97 // wm/window_animation.cc's brightness/grayscale fade animation that the login
98 // wallpaper image animation isn't hidden by the splash screen animation. 98 // wallpaper image animation isn't hidden by the splash screen animation.
99 const int kBootSplashScreenHideDurationMs = 500; 99 const int kBootSplashScreenHideDurationMs = 500;
100 #endif 100 #endif
101 101
102 float ToRelativeValue(int value, int src, int dst) {
103 return static_cast<float>(value) / static_cast<float>(src) * dst;
104 }
105
106 void MoveOriginRelativeToSize(const gfx::Size& src_size,
107 const gfx::Size& dst_size,
108 gfx::Rect* bounds_in_out) {
109 gfx::Point origin = bounds_in_out->origin();
110 bounds_in_out->set_origin(gfx::Point(
111 ToRelativeValue(origin.x(), src_size.width(), dst_size.width()),
112 ToRelativeValue(origin.y(), src_size.height(), dst_size.height())));
113 }
114
115 // Reparents |window| to |new_parent|.
116 void ReparentWindow(aura::Window* window, aura::Window* new_parent) {
117 const gfx::Size src_size = window->parent()->bounds().size();
118 const gfx::Size dst_size = new_parent->bounds().size();
119 // Update the restore bounds to make it relative to the display.
120 wm::WindowState* state = wm::GetWindowState(window);
121 gfx::Rect restore_bounds;
122 bool has_restore_bounds = state->HasRestoreBounds();
123
124 bool update_bounds = (state->IsNormalOrSnapped() || state->IsMinimized()) &&
125 new_parent->id() != kShellWindowId_DockedContainer;
126 gfx::Rect local_bounds;
127 if (update_bounds) {
128 local_bounds = WmWindowAura::GetAuraWindow(state->window())->bounds();
129 MoveOriginRelativeToSize(src_size, dst_size, &local_bounds);
130 }
131
132 if (has_restore_bounds) {
133 restore_bounds = state->GetRestoreBoundsInParent();
134 MoveOriginRelativeToSize(src_size, dst_size, &restore_bounds);
135 }
136
137 new_parent->AddChild(window);
138
139 // Docked windows have bounds handled by the layout manager in AddChild().
140 if (update_bounds)
141 window->SetBounds(local_bounds);
142
143 if (has_restore_bounds)
144 state->SetRestoreBoundsInParent(restore_bounds);
145 }
146
147 // Reparents the appropriate set of windows from |src| to |dst|.
148 void ReparentAllWindows(aura::Window* src, aura::Window* dst) {
149 // Set of windows to move.
150 const int kContainerIdsToMove[] = {
151 kShellWindowId_DefaultContainer,
152 kShellWindowId_DockedContainer,
153 kShellWindowId_PanelContainer,
154 kShellWindowId_AlwaysOnTopContainer,
155 kShellWindowId_SystemModalContainer,
156 kShellWindowId_LockSystemModalContainer,
157 kShellWindowId_UnparentedControlContainer,
158 kShellWindowId_OverlayContainer,
159 };
160 const int kExtraContainerIdsToMoveInUnifiedMode[] = {
161 kShellWindowId_LockScreenContainer,
162 kShellWindowId_LockScreenWallpaperContainer,
163 };
164 std::vector<int> container_ids(
165 kContainerIdsToMove,
166 kContainerIdsToMove + arraysize(kContainerIdsToMove));
167 // Check the default_multi_display_mode because this is also necessary
168 // in trasition between mirror <-> unified mode.
169 if (Shell::GetInstance()
170 ->display_manager()
171 ->current_default_multi_display_mode() == DisplayManager::UNIFIED) {
172 for (int id : kExtraContainerIdsToMoveInUnifiedMode)
173 container_ids.push_back(id);
174 }
175
176 for (int id : container_ids) {
177 aura::Window* src_container = Shell::GetContainer(src, id);
178 aura::Window* dst_container = Shell::GetContainer(dst, id);
179 while (!src_container->children().empty()) {
180 // Restart iteration from the source container windows each time as they
181 // may change as a result of moving other windows.
182 aura::Window::Windows::const_iterator iter =
183 src_container->children().begin();
184 while (iter != src_container->children().end() &&
185 SystemModalContainerLayoutManager::IsModalBackground(
186 WmWindowAura::Get(*iter))) {
187 ++iter;
188 }
189 // If the entire window list is modal background windows then stop.
190 if (iter == src_container->children().end())
191 break;
192 ReparentWindow(*iter, dst_container);
193 }
194 }
195 }
196
197 bool IsWindowAboveContainer(aura::Window* window, 102 bool IsWindowAboveContainer(aura::Window* window,
198 aura::Window* blocking_container) { 103 aura::Window* blocking_container) {
199 std::vector<aura::Window*> target_path; 104 std::vector<aura::Window*> target_path;
200 std::vector<aura::Window*> blocking_path; 105 std::vector<aura::Window*> blocking_path;
201 106
202 while (window) { 107 while (window) {
203 target_path.push_back(window); 108 target_path.push_back(window);
204 window = window->parent(); 109 window = window->parent();
205 } 110 }
206 111
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 // CloseChildWindows may be called twice during the shutdown of ash unittests. 451 // CloseChildWindows may be called twice during the shutdown of ash unittests.
547 // Avoid notifying WmShelf that the shelf has been destroyed twice. 452 // Avoid notifying WmShelf that the shelf has been destroyed twice.
548 if (wm_shelf_aura_->IsShelfInitialized()) 453 if (wm_shelf_aura_->IsShelfInitialized())
549 wm_shelf_aura_->ShutdownShelf(); 454 wm_shelf_aura_->ShutdownShelf();
550 455
551 aura::client::SetDragDropClient(root_window, nullptr); 456 aura::client::SetDragDropClient(root_window, nullptr);
552 aura::client::SetTooltipClient(root_window, nullptr); 457 aura::client::SetTooltipClient(root_window, nullptr);
553 } 458 }
554 459
555 void RootWindowController::MoveWindowsTo(aura::Window* dst) { 460 void RootWindowController::MoveWindowsTo(aura::Window* dst) {
556 // Clear the workspace controller, so it doesn't incorrectly update the shelf. 461 wm_root_window_controller_->MoveWindowsTo(WmWindowAura::Get(dst));
557 wm_root_window_controller_->DeleteWorkspaceController();
558 ReparentAllWindows(GetRootWindow(), dst);
559 } 462 }
560 463
561 ShelfLayoutManager* RootWindowController::GetShelfLayoutManager() { 464 ShelfLayoutManager* RootWindowController::GetShelfLayoutManager() {
562 return wm_shelf_aura_->shelf_layout_manager(); 465 return wm_shelf_aura_->shelf_layout_manager();
563 } 466 }
564 467
565 StatusAreaWidget* RootWindowController::GetStatusAreaWidget() { 468 StatusAreaWidget* RootWindowController::GetStatusAreaWidget() {
566 ShelfWidget* shelf_widget = wm_shelf_aura_->shelf_widget(); 469 ShelfWidget* shelf_widget = wm_shelf_aura_->shelf_widget();
567 return shelf_widget ? shelf_widget->status_area_widget() : nullptr; 470 return shelf_widget ? shelf_widget->status_area_widget() : nullptr;
568 } 471 }
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 EnableTouchHudProjection(); 736 EnableTouchHudProjection();
834 else 737 else
835 DisableTouchHudProjection(); 738 DisableTouchHudProjection();
836 } 739 }
837 740
838 RootWindowController* GetRootWindowController(const aura::Window* root_window) { 741 RootWindowController* GetRootWindowController(const aura::Window* root_window) {
839 return root_window ? GetRootWindowSettings(root_window)->controller : nullptr; 742 return root_window ? GetRootWindowSettings(root_window)->controller : nullptr;
840 } 743 }
841 744
842 } // namespace ash 745 } // namespace ash
OLDNEW
« no previous file with comments | « ash/mus/bridge/wm_shell_mus.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698