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

Side by Side Diff: ash/common/wm/workspace/workspace_layout_manager.cc

Issue 2295003002: mash: Remove WmRootWindowControllerObserver. (Closed)
Patch Set: Address comments. 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
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/common/wm/workspace/workspace_layout_manager.h" 5 #include "ash/common/wm/workspace/workspace_layout_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/common/session/session_state_delegate.h" 9 #include "ash/common/session/session_state_delegate.h"
10 #include "ash/common/shelf/wm_shelf.h" 10 #include "ash/common/shelf/wm_shelf.h"
11 #include "ash/common/shell_window_ids.h" 11 #include "ash/common/shell_window_ids.h"
12 #include "ash/common/wm/always_on_top_controller.h" 12 #include "ash/common/wm/always_on_top_controller.h"
13 #include "ash/common/wm/fullscreen_window_finder.h" 13 #include "ash/common/wm/fullscreen_window_finder.h"
14 #include "ash/common/wm/window_positioner.h" 14 #include "ash/common/wm/window_positioner.h"
15 #include "ash/common/wm/window_state.h" 15 #include "ash/common/wm/window_state.h"
16 #include "ash/common/wm/wm_event.h" 16 #include "ash/common/wm/wm_event.h"
17 #include "ash/common/wm/wm_screen_util.h" 17 #include "ash/common/wm/wm_screen_util.h"
18 #include "ash/common/wm/workspace/workspace_layout_manager_backdrop_delegate.h" 18 #include "ash/common/wm/workspace/workspace_layout_manager_backdrop_delegate.h"
19 #include "ash/common/wm_root_window_controller.h" 19 #include "ash/common/wm_root_window_controller.h"
20 #include "ash/common/wm_shell.h" 20 #include "ash/common/wm_shell.h"
21 #include "ash/common/wm_window.h" 21 #include "ash/common/wm_window.h"
22 #include "ash/common/wm_window_property.h" 22 #include "ash/common/wm_window_property.h"
23 #include "base/command_line.h" 23 #include "base/command_line.h"
24 #include "ui/base/ui_base_switches.h" 24 #include "ui/base/ui_base_switches.h"
25 #include "ui/compositor/layer.h" 25 #include "ui/compositor/layer.h"
26 #include "ui/display/display.h"
27 #include "ui/display/screen.h"
26 #include "ui/keyboard/keyboard_controller.h" 28 #include "ui/keyboard/keyboard_controller.h"
27 #include "ui/keyboard/keyboard_controller_observer.h" 29 #include "ui/keyboard/keyboard_controller_observer.h"
28 30
29 namespace ash { 31 namespace ash {
30 32
31 WorkspaceLayoutManager::WorkspaceLayoutManager(WmWindow* window) 33 WorkspaceLayoutManager::WorkspaceLayoutManager(WmWindow* window)
32 : window_(window), 34 : window_(window),
33 root_window_(window->GetRootWindow()), 35 root_window_(window->GetRootWindow()),
34 root_window_controller_(root_window_->GetRootWindowController()), 36 root_window_controller_(root_window_->GetRootWindowController()),
35 shell_(window_->GetShell()), 37 shell_(window_->GetShell()),
36 work_area_in_parent_(wm::GetDisplayWorkAreaBounds(window_)), 38 work_area_in_parent_(wm::GetDisplayWorkAreaBounds(window_)),
37 is_fullscreen_(wm::GetWindowForFullscreenMode(window) != nullptr) { 39 is_fullscreen_(wm::GetWindowForFullscreenMode(window) != nullptr) {
38 shell_->AddShellObserver(this); 40 shell_->AddShellObserver(this);
39 shell_->AddActivationObserver(this); 41 shell_->AddActivationObserver(this);
40 root_window_->AddObserver(this); 42 root_window_->AddObserver(this);
41 root_window_controller_->AddObserver(this); 43 display::Screen::GetScreen()->AddObserver(this);
42 DCHECK(window->GetBoolProperty( 44 DCHECK(window->GetBoolProperty(
43 WmWindowProperty::SNAP_CHILDREN_TO_PIXEL_BOUNDARY)); 45 WmWindowProperty::SNAP_CHILDREN_TO_PIXEL_BOUNDARY));
44 } 46 }
45 47
46 WorkspaceLayoutManager::~WorkspaceLayoutManager() { 48 WorkspaceLayoutManager::~WorkspaceLayoutManager() {
47 if (root_window_) 49 if (root_window_)
48 root_window_->RemoveObserver(this); 50 root_window_->RemoveObserver(this);
49 for (WmWindow* window : windows_) { 51 for (WmWindow* window : windows_) {
50 wm::WindowState* window_state = window->GetWindowState(); 52 wm::WindowState* window_state = window->GetWindowState();
51 window_state->RemoveObserver(this); 53 window_state->RemoveObserver(this);
52 window->RemoveObserver(this); 54 window->RemoveObserver(this);
53 } 55 }
54 root_window_->GetRootWindowController()->RemoveObserver(this); 56 display::Screen::GetScreen()->RemoveObserver(this);
55 shell_->RemoveActivationObserver(this); 57 shell_->RemoveActivationObserver(this);
56 shell_->RemoveShellObserver(this); 58 shell_->RemoveShellObserver(this);
57 } 59 }
58 60
59 void WorkspaceLayoutManager::SetMaximizeBackdropDelegate( 61 void WorkspaceLayoutManager::SetMaximizeBackdropDelegate(
60 std::unique_ptr<WorkspaceLayoutManagerBackdropDelegate> delegate) { 62 std::unique_ptr<WorkspaceLayoutManagerBackdropDelegate> delegate) {
61 backdrop_delegate_.reset(delegate.release()); 63 backdrop_delegate_.reset(delegate.release());
62 } 64 }
63 65
64 ////////////////////////////////////////////////////////////////////////////// 66 //////////////////////////////////////////////////////////////////////////////
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 } else if (window_state->HasRestoreBounds()) { 169 } else if (window_state->HasRestoreBounds()) {
168 // Keyboard hidden, restore original bounds if they exist. If the user has 170 // Keyboard hidden, restore original bounds if they exist. If the user has
169 // resized or dragged the window in the meantime, WorkspaceWindowResizer 171 // resized or dragged the window in the meantime, WorkspaceWindowResizer
170 // will have cleared the restore bounds and this code will not accidentally 172 // will have cleared the restore bounds and this code will not accidentally
171 // override user intent. 173 // override user intent.
172 window_state->SetAndClearRestoreBounds(); 174 window_state->SetAndClearRestoreBounds();
173 } 175 }
174 } 176 }
175 177
176 ////////////////////////////////////////////////////////////////////////////// 178 //////////////////////////////////////////////////////////////////////////////
177 // WorkspaceLayoutManager, WmRootWindowControllerObserver implementation:
178
179 void WorkspaceLayoutManager::OnWorkAreaChanged() {
180 const gfx::Rect work_area(wm::GetDisplayWorkAreaBounds(window_));
181 if (work_area != work_area_in_parent_) {
182 const wm::WMEvent event(wm::WM_EVENT_WORKAREA_BOUNDS_CHANGED);
183 AdjustAllWindowsBoundsForWorkAreaChange(&event);
184 }
185 if (backdrop_delegate_)
186 backdrop_delegate_->OnDisplayWorkAreaInsetsChanged();
187 }
188
189 //////////////////////////////////////////////////////////////////////////////
190 // WorkspaceLayoutManager, aura::WindowObserver implementation: 179 // WorkspaceLayoutManager, aura::WindowObserver implementation:
191 180
192 void WorkspaceLayoutManager::OnWindowTreeChanged( 181 void WorkspaceLayoutManager::OnWindowTreeChanged(
193 WmWindow* window, 182 WmWindow* window,
194 const WmWindowObserver::TreeChangeParams& params) { 183 const WmWindowObserver::TreeChangeParams& params) {
195 if (!params.target->GetWindowState()->IsActive()) 184 if (!params.target->GetWindowState()->IsActive())
196 return; 185 return;
197 // If the window is already tracked by the workspace this update would be 186 // If the window is already tracked by the workspace this update would be
198 // redundant as the fullscreen and shelf state would have been handled in 187 // redundant as the fullscreen and shelf state would have been handled in
199 // OnWindowAddedToLayout. 188 // OnWindowAddedToLayout.
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 old_type == wm::WINDOW_STATE_TYPE_FULLSCREEN) { 264 old_type == wm::WINDOW_STATE_TYPE_FULLSCREEN) {
276 UpdateFullscreenState(); 265 UpdateFullscreenState();
277 } 266 }
278 267
279 UpdateShelfVisibility(); 268 UpdateShelfVisibility();
280 if (backdrop_delegate_) 269 if (backdrop_delegate_)
281 backdrop_delegate_->OnPostWindowStateTypeChange(window_state, old_type); 270 backdrop_delegate_->OnPostWindowStateTypeChange(window_state, old_type);
282 } 271 }
283 272
284 ////////////////////////////////////////////////////////////////////////////// 273 //////////////////////////////////////////////////////////////////////////////
274 // WorkspaceLayoutManager, display::DisplayObserver implementation:
275
276 void WorkspaceLayoutManager::OnDisplayMetricsChanged(
277 const display::Display& display,
278 uint32_t changed_metrics) {
279 if (window_->GetDisplayNearestWindow().id() != display.id())
280 return;
281
282 const gfx::Rect work_area(wm::GetDisplayWorkAreaBounds(window_));
283 if (work_area != work_area_in_parent_) {
284 const wm::WMEvent event(wm::WM_EVENT_WORKAREA_BOUNDS_CHANGED);
285 AdjustAllWindowsBoundsForWorkAreaChange(&event);
286 }
287 if (backdrop_delegate_)
288 backdrop_delegate_->OnDisplayWorkAreaInsetsChanged();
289 }
290
291 //////////////////////////////////////////////////////////////////////////////
285 // WorkspaceLayoutManager, ShellObserver implementation: 292 // WorkspaceLayoutManager, ShellObserver implementation:
286 293
287 void WorkspaceLayoutManager::OnFullscreenStateChanged(bool is_fullscreen, 294 void WorkspaceLayoutManager::OnFullscreenStateChanged(bool is_fullscreen,
288 WmWindow* root_window) { 295 WmWindow* root_window) {
289 if (root_window != root_window_ || is_fullscreen_ == is_fullscreen) 296 if (root_window != root_window_ || is_fullscreen_ == is_fullscreen)
290 return; 297 return;
291 298
292 is_fullscreen_ = is_fullscreen; 299 is_fullscreen_ = is_fullscreen;
293 if (WmShell::Get()->IsPinned()) { 300 if (WmShell::Get()->IsPinned()) {
294 // If this is in pinned mode, then this event does not trigger the 301 // If this is in pinned mode, then this event does not trigger the
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 for (auto* window : windows) { 375 for (auto* window : windows) {
369 wm::WindowState* window_state = window->GetWindowState(); 376 wm::WindowState* window_state = window->GetWindowState();
370 if (window_on_top) 377 if (window_on_top)
371 window_state->DisableAlwaysOnTop(window_on_top); 378 window_state->DisableAlwaysOnTop(window_on_top);
372 else 379 else
373 window_state->RestoreAlwaysOnTop(); 380 window_state->RestoreAlwaysOnTop();
374 } 381 }
375 } 382 }
376 383
377 } // namespace ash 384 } // namespace ash
OLDNEW
« no previous file with comments | « ash/common/wm/workspace/workspace_layout_manager.h ('k') | ash/common/wm_root_window_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698