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

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

Issue 149493008: Use active window if on current workspace for fullscreen mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Only consider the currently active window on current root. Created 6 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 | 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"
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 Shell::GetScreen()->GetDisplayNearestWindow(window_).work_area())); 149 Shell::GetScreen()->GetDisplayNearestWindow(window_).work_area()));
150 if (work_area != work_area_in_parent_) { 150 if (work_area != work_area_in_parent_) {
151 AdjustAllWindowsBoundsForWorkAreaChange( 151 AdjustAllWindowsBoundsForWorkAreaChange(
152 ADJUST_WINDOW_WORK_AREA_INSETS_CHANGED); 152 ADJUST_WINDOW_WORK_AREA_INSETS_CHANGED);
153 } 153 }
154 } 154 }
155 155
156 ////////////////////////////////////////////////////////////////////////////// 156 //////////////////////////////////////////////////////////////////////////////
157 // WorkspaceLayoutManager, aura::WindowObserver implementation: 157 // WorkspaceLayoutManager, aura::WindowObserver implementation:
158 158
159 void WorkspaceLayoutManager::OnWindowHierarchyChanged(
160 const WindowObserver::HierarchyChangeParams& params) {
oshima 2014/02/21 19:49:46 A display may become fullscreen when the fullscree
flackr 2014/02/24 16:21:10 Yes, if an active window (i.e. panel) is preventin
161 if (!wm::GetWindowState(params.target)->IsActive())
162 return;
163 // If the window is already tracked by the workspace this update would be
164 // redundant as the fullscreen and shelf state would have been handled in
165 // OnWindowAddedToLayout.
166 if (windows_.find(params.target) != windows_.end())
167 return;
168
169 // If the active window has moved to this root window then update the
170 // fullscreen state.
171 // TODO(flackr): Track the active window leaving this root window and update
172 // the fullscreen state accordingly.
173 if (params.new_parent && params.new_parent->GetRootWindow() == root_window_) {
174 UpdateFullscreenState();
175 UpdateShelfVisibility();
176 }
177 }
178
159 void WorkspaceLayoutManager::OnWindowPropertyChanged(Window* window, 179 void WorkspaceLayoutManager::OnWindowPropertyChanged(Window* window,
160 const void* key, 180 const void* key,
161 intptr_t old) { 181 intptr_t old) {
162 if (key == aura::client::kAlwaysOnTopKey && 182 if (key == aura::client::kAlwaysOnTopKey &&
163 window->GetProperty(aura::client::kAlwaysOnTopKey)) { 183 window->GetProperty(aura::client::kAlwaysOnTopKey)) {
164 GetRootWindowController(window->GetRootWindow())-> 184 GetRootWindowController(window->GetRootWindow())->
165 always_on_top_controller()->GetContainer(window)->AddChild(window); 185 always_on_top_controller()->GetContainer(window)->AddChild(window);
166 } 186 }
167 } 187 }
168 188
(...skipping 14 matching lines...) Expand all
183 const gfx::Rect& new_bounds) { 203 const gfx::Rect& new_bounds) {
184 if (root_window_ == window) 204 if (root_window_ == window)
185 AdjustAllWindowsBoundsForWorkAreaChange(ADJUST_WINDOW_DISPLAY_SIZE_CHANGED); 205 AdjustAllWindowsBoundsForWorkAreaChange(ADJUST_WINDOW_DISPLAY_SIZE_CHANGED);
186 } 206 }
187 207
188 ////////////////////////////////////////////////////////////////////////////// 208 //////////////////////////////////////////////////////////////////////////////
189 // WorkspaceLayoutManager, 209 // WorkspaceLayoutManager,
190 // aura::client::ActivationChangeObserver implementation: 210 // aura::client::ActivationChangeObserver implementation:
191 211
192 void WorkspaceLayoutManager::OnWindowActivated(aura::Window* gained_active, 212 void WorkspaceLayoutManager::OnWindowActivated(aura::Window* gained_active,
193 aura::Window* lost_active) { 213 aura::Window* lost_active) {
194 wm::WindowState* window_state = wm::GetWindowState(gained_active); 214 wm::WindowState* window_state = wm::GetWindowState(gained_active);
195 if (window_state && window_state->IsMinimized() && 215 if (window_state && window_state->IsMinimized() &&
196 !gained_active->IsVisible()) { 216 !gained_active->IsVisible()) {
197 window_state->Unminimize(); 217 window_state->Unminimize();
198 DCHECK(!window_state->IsMinimized()); 218 DCHECK(!window_state->IsMinimized());
199 } 219 }
220 UpdateFullscreenState();
200 } 221 }
201 222
202 ////////////////////////////////////////////////////////////////////////////// 223 //////////////////////////////////////////////////////////////////////////////
203 // WorkspaceLayoutManager, wm::WindowStateObserver implementation: 224 // WorkspaceLayoutManager, wm::WindowStateObserver implementation:
204 225
205 void WorkspaceLayoutManager::OnPostWindowShowTypeChange( 226 void WorkspaceLayoutManager::OnPostWindowShowTypeChange(
206 wm::WindowState* window_state, 227 wm::WindowState* window_state,
207 wm::WindowShowType old_type) { 228 wm::WindowShowType old_type) {
208 229
209 // Notify observers that fullscreen state may be changing. 230 // Notify observers that fullscreen state may be changing.
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 if (window->bounds() != bounds) 330 if (window->bounds() != bounds)
310 window->SetBounds(bounds); 331 window->SetBounds(bounds);
311 } 332 }
312 333
313 void WorkspaceLayoutManager::UpdateShelfVisibility() { 334 void WorkspaceLayoutManager::UpdateShelfVisibility() {
314 if (shelf_) 335 if (shelf_)
315 shelf_->UpdateVisibilityState(); 336 shelf_->UpdateVisibilityState();
316 } 337 }
317 338
318 void WorkspaceLayoutManager::UpdateFullscreenState() { 339 void WorkspaceLayoutManager::UpdateFullscreenState() {
340 // TODO(flackr): The fullscreen state is currently tracked per workspace
341 // but the shell notification implies a per root window state. Currently
342 // only windows in the default workspace container will go fullscreen but
343 // this should really be tracked by the RootWindowController since
344 // technically any container could get a fullscreen window.
345 if (!shelf_)
346 return;
319 bool is_fullscreen = GetRootWindowController( 347 bool is_fullscreen = GetRootWindowController(
320 window_->GetRootWindow())->GetWindowForFullscreenMode() != NULL; 348 window_->GetRootWindow())->GetWindowForFullscreenMode() != NULL;
321 if (is_fullscreen != is_fullscreen_) { 349 if (is_fullscreen != is_fullscreen_) {
322 ash::Shell::GetInstance()->NotifyFullscreenStateChange( 350 ash::Shell::GetInstance()->NotifyFullscreenStateChange(
323 is_fullscreen, window_->GetRootWindow()); 351 is_fullscreen, window_->GetRootWindow());
324 is_fullscreen_ = is_fullscreen; 352 is_fullscreen_ = is_fullscreen;
325 } 353 }
326 } 354 }
327 355
328 bool WorkspaceLayoutManager::SetMaximizedOrFullscreenBounds( 356 bool WorkspaceLayoutManager::SetMaximizedOrFullscreenBounds(
(...skipping 10 matching lines...) Expand all
339 SetChildBoundsDirect( 367 SetChildBoundsDirect(
340 window_state->window(), 368 window_state->window(),
341 ScreenUtil::GetDisplayBoundsInParent(window_state->window())); 369 ScreenUtil::GetDisplayBoundsInParent(window_state->window()));
342 return true; 370 return true;
343 } 371 }
344 return false; 372 return false;
345 } 373 }
346 374
347 } // namespace internal 375 } // namespace internal
348 } // namespace ash 376 } // namespace ash
OLDNEW
« ash/wm/panels/panel_window_resizer_unittest.cc ('K') | « ash/wm/workspace/workspace_layout_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698