Index: ash/wm/base_layout_manager.cc |
diff --git a/ash/wm/base_layout_manager.cc b/ash/wm/base_layout_manager.cc |
index 236fb00fdeeb5a5e2d67f6fb819bbba27bee4896..768567487b10862d9b63d4d08f76ee1248a6376c 100644 |
--- a/ash/wm/base_layout_manager.cc |
+++ b/ash/wm/base_layout_manager.cc |
@@ -10,7 +10,7 @@ |
#include "ash/shell.h" |
#include "ash/wm/window_animations.h" |
#include "ash/wm/window_properties.h" |
-#include "ash/wm/window_settings.h" |
+#include "ash/wm/window_state.h" |
#include "ash/wm/window_util.h" |
#include "ash/wm/workspace/workspace_window_resizer.h" |
#include "ui/aura/client/activation_client.h" |
@@ -69,17 +69,19 @@ void BaseLayoutManager::OnWindowResized() { |
void BaseLayoutManager::OnWindowAddedToLayout(aura::Window* child) { |
windows_.insert(child); |
child->AddObserver(this); |
- wm::GetWindowSettings(child)->AddObserver(this); |
+ wm::WindowState* window_state = wm::GetWindowState(child); |
+ window_state->AddObserver(this); |
+ |
// Only update the bounds if the window has a show state that depends on the |
// workspace area. |
- if (wm::IsWindowMaximized(child) || wm::IsWindowFullscreen(child)) |
- UpdateBoundsFromShowState(child); |
+ if (window_state->IsMaximizedOrFullscreen()) |
+ UpdateBoundsFromShowState(window_state); |
} |
void BaseLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) { |
windows_.erase(child); |
child->RemoveObserver(this); |
- wm::GetWindowSettings(child)->RemoveObserver(this); |
+ wm::GetWindowState(child)->RemoveObserver(this); |
} |
void BaseLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) { |
@@ -87,21 +89,20 @@ void BaseLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) { |
void BaseLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child, |
bool visible) { |
- if (visible && wm::IsWindowMinimized(child)) { |
- // Attempting to show a minimized window. Unminimize it. |
- child->SetProperty(aura::client::kShowStateKey, |
- child->GetProperty(aura::client::kRestoreShowStateKey)); |
- child->ClearProperty(aura::client::kRestoreShowStateKey); |
- } |
+ wm::WindowState* window_state = wm::GetWindowState(child); |
+ // Attempting to show a minimized window. Unminimize it. |
+ if (visible && window_state->IsMinimized()) |
+ window_state->Unminimize(); |
} |
void BaseLayoutManager::SetChildBounds(aura::Window* child, |
const gfx::Rect& requested_bounds) { |
gfx::Rect child_bounds(requested_bounds); |
+ wm::WindowState* window_state = wm::GetWindowState(child); |
// Some windows rely on this to set their initial bounds. |
- if (wm::IsWindowMaximized(child)) |
+ if (window_state->IsMaximized()) |
child_bounds = ScreenAsh::GetMaximizedWindowBoundsInParent(child); |
- else if (wm::IsWindowFullscreen(child)) |
+ else if (window_state->IsFullscreen()) |
child_bounds = ScreenAsh::GetDisplayBoundsInParent(child); |
SetChildBoundsDirect(child, child_bounds); |
} |
@@ -116,17 +117,19 @@ void BaseLayoutManager::OnWindowPropertyChanged(aura::Window* window, |
ui::WindowShowState old_state = static_cast<ui::WindowShowState>(old); |
ui::WindowShowState new_state = |
window->GetProperty(aura::client::kShowStateKey); |
+ wm::WindowState* window_state = wm::GetWindowState(window); |
+ |
if (old_state != new_state && old_state != ui::SHOW_STATE_MINIMIZED && |
- !GetRestoreBoundsInScreen(window) && |
+ !window_state->HasRestoreBounds() && |
((new_state == ui::SHOW_STATE_MAXIMIZED && |
old_state != ui::SHOW_STATE_FULLSCREEN) || |
(new_state == ui::SHOW_STATE_FULLSCREEN && |
old_state != ui::SHOW_STATE_MAXIMIZED))) { |
- SetRestoreBoundsInParent(window, window->bounds()); |
+ window_state->SetRestoreBoundsInParent(window->bounds()); |
} |
- UpdateBoundsFromShowState(window); |
- ShowStateChanged(window, old_state); |
+ UpdateBoundsFromShowState(window_state); |
+ ShowStateChanged(window_state, old_state); |
} |
} |
@@ -149,10 +152,11 @@ void BaseLayoutManager::OnWindowBoundsChanged(aura::Window* window, |
void BaseLayoutManager::OnWindowActivated(aura::Window* gained_active, |
aura::Window* lost_active) { |
- if (gained_active && wm::IsWindowMinimized(gained_active) && |
+ wm::WindowState* window_state = wm::GetWindowState(gained_active); |
+ if (window_state && window_state->IsMinimized() && |
!gained_active->IsVisible()) { |
gained_active->Show(); |
- DCHECK(!wm::IsWindowMinimized(gained_active)); |
+ DCHECK(!window_state->IsMinimized()); |
} |
} |
@@ -167,29 +171,30 @@ void BaseLayoutManager::OnDisplayWorkAreaInsetsChanged() { |
////////////////////////////////////////////////////////////////////////////// |
// BaseLayoutManager, protected: |
-void BaseLayoutManager::ShowStateChanged(aura::Window* window, |
- ui::WindowShowState last_show_state) { |
- if (wm::IsWindowMinimized(window)) { |
+void BaseLayoutManager::ShowStateChanged( |
+ wm::WindowState* window_state, |
+ ui::WindowShowState last_show_state) { |
+ if (window_state->IsMinimized()) { |
// Save the previous show state so that we can correctly restore it. |
- window->SetProperty(aura::client::kRestoreShowStateKey, last_show_state); |
+ window_state->window()->SetProperty(aura::client::kRestoreShowStateKey, |
+ last_show_state); |
views::corewm::SetWindowVisibilityAnimationType( |
- window, WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE); |
+ window_state->window(), WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE); |
// Hide the window. |
- window->Hide(); |
+ window_state->window()->Hide(); |
// Activate another window. |
- if (wm::IsActiveWindow(window)) |
- wm::DeactivateWindow(window); |
- } else if ((window->TargetVisibility() || |
+ if (window_state->IsActive()) |
+ window_state->Deactivate(); |
+ } else if ((window_state->window()->TargetVisibility() || |
last_show_state == ui::SHOW_STATE_MINIMIZED) && |
- !window->layer()->visible()) { |
+ !window_state->window()->layer()->visible()) { |
// The layer may be hidden if the window was previously minimized. Make |
// sure it's visible. |
- window->Show(); |
+ window_state->window()->Show(); |
if (last_show_state == ui::SHOW_STATE_MINIMIZED && |
- !wm::IsWindowMaximized(window) && |
- !wm::IsWindowFullscreen(window)) { |
- window->ClearProperty(internal::kWindowRestoresToRestoreBounds); |
+ !window_state->IsMaximizedOrFullscreen()) { |
+ window_state->set_always_restores_to_restore_bounds(false); |
} |
} |
} |
@@ -211,17 +216,18 @@ void BaseLayoutManager::AdjustAllWindowsBoundsForWorkAreaChange( |
for (WindowSet::const_iterator it = windows_.begin(); |
it != windows_.end(); |
++it) { |
- AdjustWindowBoundsForWorkAreaChange(*it, reason); |
+ AdjustWindowBoundsForWorkAreaChange(wm::GetWindowState(*it), reason); |
} |
} |
void BaseLayoutManager::AdjustWindowBoundsForWorkAreaChange( |
- aura::Window* window, |
+ wm::WindowState* window_state, |
AdjustWindowReason reason) { |
- if (wm::IsWindowMaximized(window)) { |
+ aura::Window* window = window_state->window(); |
+ if (window_state->IsMaximized()) { |
SetChildBoundsDirect( |
window, ScreenAsh::GetMaximizedWindowBoundsInParent(window)); |
- } else if (wm::IsWindowFullscreen(window)) { |
+ } else if (window_state->IsFullscreen()) { |
SetChildBoundsDirect( |
window, ScreenAsh::GetDisplayBoundsInParent(window)); |
} else { |
@@ -238,32 +244,32 @@ void BaseLayoutManager::AdjustWindowBoundsForWorkAreaChange( |
////////////////////////////////////////////////////////////////////////////// |
// BaseLayoutManager, private: |
-void BaseLayoutManager::UpdateBoundsFromShowState(aura::Window* window) { |
- switch (window->GetProperty(aura::client::kShowStateKey)) { |
+void BaseLayoutManager::UpdateBoundsFromShowState( |
+ wm::WindowState* window_state) { |
+ aura::Window* window = window_state->window(); |
+ switch (window_state->GetShowState()) { |
case ui::SHOW_STATE_DEFAULT: |
case ui::SHOW_STATE_NORMAL: { |
- const gfx::Rect* restore = GetRestoreBoundsInScreen(window); |
- if (restore) { |
- gfx::Rect bounds_in_parent = |
- ScreenAsh::ConvertRectFromScreen(window->parent(), *restore); |
+ if (window_state->HasRestoreBounds()) { |
+ gfx::Rect bounds_in_parent = window_state->GetRestoreBoundsInParent(); |
SetChildBoundsDirect(window, |
BoundsWithScreenEdgeVisible(window, |
bounds_in_parent)); |
} |
- ClearRestoreBounds(window); |
+ window_state->ClearRestoreBounds(); |
break; |
} |
case ui::SHOW_STATE_MAXIMIZED: |
- SetChildBoundsDirect(window, |
- ScreenAsh::GetMaximizedWindowBoundsInParent(window)); |
+ SetChildBoundsDirect( |
+ window, ScreenAsh::GetMaximizedWindowBoundsInParent(window)); |
break; |
case ui::SHOW_STATE_FULLSCREEN: |
// Don't animate the full-screen window transition. |
// TODO(jamescook): Use animation here. Be sure the lock screen works. |
- SetChildBoundsDirect( |
- window, ScreenAsh::GetDisplayBoundsInParent(window)); |
+ SetChildBoundsDirect(window, |
+ ScreenAsh::GetDisplayBoundsInParent(window)); |
break; |
default: |