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

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

Issue 169643005: Adding a gray semi transparent backdrop behind the topmost window within the default container (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed Created 6 years, 9 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 | Annotate | Revision Log
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/wm/workspace/workspace_layout_manager.h" 5 #include "ash/wm/workspace/workspace_layout_manager.h"
6 6
7 #include "ash/display/display_controller.h" 7 #include "ash/display/display_controller.h"
8 #include "ash/root_window_controller.h" 8 #include "ash/root_window_controller.h"
9 #include "ash/screen_util.h" 9 #include "ash/screen_util.h"
10 #include "ash/session_state_delegate.h" 10 #include "ash/session_state_delegate.h"
11 #include "ash/shelf/shelf_layout_manager.h" 11 #include "ash/shelf/shelf_layout_manager.h"
12 #include "ash/shell.h" 12 #include "ash/shell.h"
13 #include "ash/wm/always_on_top_controller.h" 13 #include "ash/wm/always_on_top_controller.h"
14 #include "ash/wm/window_animations.h" 14 #include "ash/wm/window_animations.h"
15 #include "ash/wm/window_positioner.h" 15 #include "ash/wm/window_positioner.h"
16 #include "ash/wm/window_properties.h" 16 #include "ash/wm/window_properties.h"
17 #include "ash/wm/window_state.h" 17 #include "ash/wm/window_state.h"
18 #include "ash/wm/window_util.h" 18 #include "ash/wm/window_util.h"
19 #include "ash/wm/wm_event.h" 19 #include "ash/wm/wm_event.h"
20 #include "ash/wm/workspace/workspace_layout_manager_delegate.h"
20 #include "ui/aura/client/activation_client.h" 21 #include "ui/aura/client/activation_client.h"
21 #include "ui/aura/client/aura_constants.h" 22 #include "ui/aura/client/aura_constants.h"
22 #include "ui/aura/window.h" 23 #include "ui/aura/window.h"
23 #include "ui/aura/window_observer.h" 24 #include "ui/aura/window_observer.h"
24 #include "ui/base/ui_base_types.h" 25 #include "ui/base/ui_base_types.h"
25 #include "ui/compositor/layer.h" 26 #include "ui/compositor/layer.h"
26 #include "ui/events/event.h" 27 #include "ui/events/event.h"
27 #include "ui/gfx/screen.h" 28 #include "ui/gfx/screen.h"
28 #include "ui/views/corewm/window_util.h" 29 #include "ui/views/corewm/window_util.h"
29 30
(...skipping 23 matching lines...) Expand all
53 for (WindowSet::const_iterator i = windows_.begin(); i != windows_.end(); ++i) 54 for (WindowSet::const_iterator i = windows_.begin(); i != windows_.end(); ++i)
54 (*i)->RemoveObserver(this); 55 (*i)->RemoveObserver(this);
55 Shell::GetInstance()->RemoveShellObserver(this); 56 Shell::GetInstance()->RemoveShellObserver(this);
56 Shell::GetInstance()->activation_client()->RemoveObserver(this); 57 Shell::GetInstance()->activation_client()->RemoveObserver(this);
57 } 58 }
58 59
59 void WorkspaceLayoutManager::SetShelf(internal::ShelfLayoutManager* shelf) { 60 void WorkspaceLayoutManager::SetShelf(internal::ShelfLayoutManager* shelf) {
60 shelf_ = shelf; 61 shelf_ = shelf;
61 } 62 }
62 63
64 void WorkspaceLayoutManager::SetMaximizeBackdropDelegate(
65 scoped_ptr<WorkspaceLayoutManagerDelegate> delegate) {
66 backdrop_delegate_.reset(delegate.release());
67 }
68
63 ////////////////////////////////////////////////////////////////////////////// 69 //////////////////////////////////////////////////////////////////////////////
64 // WorkspaceLayoutManager, aura::LayoutManager implementation: 70 // WorkspaceLayoutManager, aura::LayoutManager implementation:
65 71
66 void WorkspaceLayoutManager::OnWindowAddedToLayout(Window* child) { 72 void WorkspaceLayoutManager::OnWindowAddedToLayout(Window* child) {
67 wm::WindowState* window_state = wm::GetWindowState(child); 73 wm::WindowState* window_state = wm::GetWindowState(child);
68 wm::WMEvent event(wm::WM_EVENT_ADDED_TO_WORKSPACE); 74 wm::WMEvent event(wm::WM_EVENT_ADDED_TO_WORKSPACE);
69 window_state->OnWMEvent(&event); 75 window_state->OnWMEvent(&event);
70 windows_.insert(child); 76 windows_.insert(child);
71 child->AddObserver(this); 77 child->AddObserver(this);
72 window_state->AddObserver(this); 78 window_state->AddObserver(this);
73 UpdateShelfVisibility(); 79 UpdateShelfVisibility();
74 UpdateFullscreenState(); 80 UpdateFullscreenState();
81 if (backdrop_delegate_)
82 backdrop_delegate_->OnWindowAddedToLayout(child);
75 WindowPositioner::RearrangeVisibleWindowOnShow(child); 83 WindowPositioner::RearrangeVisibleWindowOnShow(child);
76 } 84 }
77 85
78 void WorkspaceLayoutManager::OnWillRemoveWindowFromLayout(Window* child) { 86 void WorkspaceLayoutManager::OnWillRemoveWindowFromLayout(Window* child) {
79 windows_.erase(child); 87 windows_.erase(child);
80 child->RemoveObserver(this); 88 child->RemoveObserver(this);
81 wm::GetWindowState(child)->RemoveObserver(this); 89 wm::GetWindowState(child)->RemoveObserver(this);
82 90
83 if (child->TargetVisibility()) 91 if (child->TargetVisibility())
84 WindowPositioner::RearrangeVisibleWindowOnHideOrRemove(child); 92 WindowPositioner::RearrangeVisibleWindowOnHideOrRemove(child);
85 } 93 }
86 94
87 void WorkspaceLayoutManager::OnWindowRemovedFromLayout(Window* child) { 95 void WorkspaceLayoutManager::OnWindowRemovedFromLayout(Window* child) {
88 UpdateShelfVisibility(); 96 UpdateShelfVisibility();
89 UpdateFullscreenState(); 97 UpdateFullscreenState();
98 if (backdrop_delegate_)
99 backdrop_delegate_->OnWindowRemovedFromLayout(child);
90 } 100 }
91 101
92 void WorkspaceLayoutManager::OnChildWindowVisibilityChanged(Window* child, 102 void WorkspaceLayoutManager::OnChildWindowVisibilityChanged(Window* child,
93 bool visible) { 103 bool visible) {
94 wm::WindowState* window_state = wm::GetWindowState(child); 104 wm::WindowState* window_state = wm::GetWindowState(child);
95 // Attempting to show a minimized window. Unminimize it. 105 // Attempting to show a minimized window. Unminimize it.
96 if (visible && window_state->IsMinimized()) 106 if (visible && window_state->IsMinimized())
97 window_state->Unminimize(); 107 window_state->Unminimize();
98 108
99 if (child->TargetVisibility()) 109 if (child->TargetVisibility())
100 WindowPositioner::RearrangeVisibleWindowOnShow(child); 110 WindowPositioner::RearrangeVisibleWindowOnShow(child);
101 else 111 else
102 WindowPositioner::RearrangeVisibleWindowOnHideOrRemove(child); 112 WindowPositioner::RearrangeVisibleWindowOnHideOrRemove(child);
103 UpdateFullscreenState(); 113 UpdateFullscreenState();
104 UpdateShelfVisibility(); 114 UpdateShelfVisibility();
115 if (backdrop_delegate_)
116 backdrop_delegate_->OnChildWindowVisibilityChanged(child, visible);
105 } 117 }
106 118
107 void WorkspaceLayoutManager::SetChildBounds( 119 void WorkspaceLayoutManager::SetChildBounds(
108 Window* child, 120 Window* child,
109 const gfx::Rect& requested_bounds) { 121 const gfx::Rect& requested_bounds) {
110 wm::WindowState* window_state = wm::GetWindowState(child); 122 wm::WindowState* window_state = wm::GetWindowState(child);
111 wm::SetBoundsEvent event(wm::WM_EVENT_SET_BOUNDS, requested_bounds); 123 wm::SetBoundsEvent event(wm::WM_EVENT_SET_BOUNDS, requested_bounds);
112 window_state->OnWMEvent(&event); 124 window_state->OnWMEvent(&event);
113 UpdateShelfVisibility(); 125 UpdateShelfVisibility();
114 } 126 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 if (key == aura::client::kAlwaysOnTopKey && 167 if (key == aura::client::kAlwaysOnTopKey &&
156 window->GetProperty(aura::client::kAlwaysOnTopKey)) { 168 window->GetProperty(aura::client::kAlwaysOnTopKey)) {
157 GetRootWindowController(window->GetRootWindow())-> 169 GetRootWindowController(window->GetRootWindow())->
158 always_on_top_controller()->GetContainer(window)->AddChild(window); 170 always_on_top_controller()->GetContainer(window)->AddChild(window);
159 } 171 }
160 } 172 }
161 173
162 void WorkspaceLayoutManager::OnWindowStackingChanged(aura::Window* window) { 174 void WorkspaceLayoutManager::OnWindowStackingChanged(aura::Window* window) {
163 UpdateShelfVisibility(); 175 UpdateShelfVisibility();
164 UpdateFullscreenState(); 176 UpdateFullscreenState();
177 if (backdrop_delegate_)
178 backdrop_delegate_->OnWindowStackingChanged(window);
165 } 179 }
166 180
167 void WorkspaceLayoutManager::OnWindowDestroying(aura::Window* window) { 181 void WorkspaceLayoutManager::OnWindowDestroying(aura::Window* window) {
168 if (root_window_ == window) { 182 if (root_window_ == window) {
169 root_window_->RemoveObserver(this); 183 root_window_->RemoveObserver(this);
170 root_window_ = NULL; 184 root_window_ = NULL;
171 } 185 }
172 } 186 }
173 187
174 void WorkspaceLayoutManager::OnWindowBoundsChanged(aura::Window* window, 188 void WorkspaceLayoutManager::OnWindowBoundsChanged(aura::Window* window,
(...skipping 28 matching lines...) Expand all
203 wm::WindowState* window_state, 217 wm::WindowState* window_state,
204 wm::WindowStateType old_type) { 218 wm::WindowStateType old_type) {
205 219
206 // Notify observers that fullscreen state may be changing. 220 // Notify observers that fullscreen state may be changing.
207 if (window_state->IsFullscreen() || 221 if (window_state->IsFullscreen() ||
208 old_type == wm::WINDOW_STATE_TYPE_FULLSCREEN) { 222 old_type == wm::WINDOW_STATE_TYPE_FULLSCREEN) {
209 UpdateFullscreenState(); 223 UpdateFullscreenState();
210 } 224 }
211 225
212 UpdateShelfVisibility(); 226 UpdateShelfVisibility();
227 if (backdrop_delegate_)
228 backdrop_delegate_->OnPostWindowStateTypeChange(window_state, old_type);
213 } 229 }
214 230
215 ////////////////////////////////////////////////////////////////////////////// 231 //////////////////////////////////////////////////////////////////////////////
216 // WorkspaceLayoutManager, private: 232 // WorkspaceLayoutManager, private:
217 233
218 void WorkspaceLayoutManager::AdjustAllWindowsBoundsForWorkAreaChange( 234 void WorkspaceLayoutManager::AdjustAllWindowsBoundsForWorkAreaChange(
219 const wm::WMEvent* event) { 235 const wm::WMEvent* event) {
220 DCHECK(event->type() == wm::WM_EVENT_DISPLAY_BOUNDS_CHANGED || 236 DCHECK(event->type() == wm::WM_EVENT_DISPLAY_BOUNDS_CHANGED ||
221 event->type() == wm::WM_EVENT_WORKAREA_BOUNDS_CHANGED); 237 event->type() == wm::WM_EVENT_WORKAREA_BOUNDS_CHANGED);
222 238
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 window_->GetRootWindow())->GetWindowForFullscreenMode() != NULL; 276 window_->GetRootWindow())->GetWindowForFullscreenMode() != NULL;
261 if (is_fullscreen != is_fullscreen_) { 277 if (is_fullscreen != is_fullscreen_) {
262 ash::Shell::GetInstance()->NotifyFullscreenStateChange( 278 ash::Shell::GetInstance()->NotifyFullscreenStateChange(
263 is_fullscreen, window_->GetRootWindow()); 279 is_fullscreen, window_->GetRootWindow());
264 is_fullscreen_ = is_fullscreen; 280 is_fullscreen_ = is_fullscreen;
265 } 281 }
266 } 282 }
267 283
268 } // namespace internal 284 } // namespace internal
269 } // namespace ash 285 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698