Index: ash/wm/workspace/workspace_layout_manager.cc |
diff --git a/ash/wm/workspace/workspace_layout_manager.cc b/ash/wm/workspace/workspace_layout_manager.cc |
index 5d9e0d9e3ef1b778d76fc8030a68f4824b58318b..32e6e173d0af9fbadfc38ca0a6bb22a2cfa0836b 100644 |
--- a/ash/wm/workspace/workspace_layout_manager.cc |
+++ b/ash/wm/workspace/workspace_layout_manager.cc |
@@ -32,32 +32,33 @@ |
#include "ui/display/screen.h" |
#include "ui/keyboard/keyboard_controller.h" |
#include "ui/keyboard/keyboard_controller_observer.h" |
+#include "ui/wm/core/coordinate_conversion.h" |
#include "ui/wm/public/activation_client.h" |
namespace ash { |
-WorkspaceLayoutManager::WorkspaceLayoutManager(WmWindow* window) |
+WorkspaceLayoutManager::WorkspaceLayoutManager(aura::Window* window) |
: window_(window), |
root_window_(window->GetRootWindow()), |
- root_window_controller_(root_window_->GetRootWindowController()), |
+ root_window_controller_(RootWindowController::ForWindow(root_window_)), |
work_area_in_parent_( |
- ScreenUtil::GetDisplayWorkAreaBoundsInParent(window_->aura_window())), |
+ ScreenUtil::GetDisplayWorkAreaBoundsInParent(window_)), |
is_fullscreen_(wm::GetWindowForFullscreenMode(window) != nullptr), |
keyboard_observer_(this) { |
Shell::Get()->AddShellObserver(this); |
Shell::Get()->activation_client()->AddObserver(this); |
- root_window_->aura_window()->AddObserver(this); |
+ root_window_->AddObserver(this); |
display::Screen::GetScreen()->AddObserver(this); |
- DCHECK(window->aura_window()->GetProperty(kSnapChildrenToPixelBoundary)); |
+ DCHECK(window->GetProperty(kSnapChildrenToPixelBoundary)); |
} |
WorkspaceLayoutManager::~WorkspaceLayoutManager() { |
if (root_window_) |
- root_window_->aura_window()->RemoveObserver(this); |
- for (WmWindow* window : windows_) { |
- wm::WindowState* window_state = window->GetWindowState(); |
+ root_window_->RemoveObserver(this); |
+ for (aura::Window* window : windows_) { |
+ wm::WindowState* window_state = wm::GetWindowState(window); |
window_state->RemoveObserver(this); |
- window->aura_window()->RemoveObserver(this); |
+ window->RemoveObserver(this); |
} |
display::Screen::GetScreen()->RemoveObserver(this); |
Shell::Get()->activation_client()->RemoveObserver(this); |
@@ -74,59 +75,63 @@ void WorkspaceLayoutManager::SetMaximizeBackdropDelegate( |
void WorkspaceLayoutManager::OnWindowResized() {} |
-void WorkspaceLayoutManager::OnWindowAddedToLayout(WmWindow* child) { |
- wm::WindowState* window_state = child->GetWindowState(); |
+void WorkspaceLayoutManager::OnWindowAddedToLayout(aura::Window* child) { |
+ wm::WindowState* window_state = wm::GetWindowState(child); |
wm::WMEvent event(wm::WM_EVENT_ADDED_TO_WORKSPACE); |
window_state->OnWMEvent(&event); |
windows_.insert(child); |
- child->aura_window()->AddObserver(this); |
+ child->AddObserver(this); |
window_state->AddObserver(this); |
UpdateShelfVisibility(); |
UpdateFullscreenState(); |
if (backdrop_delegate_) |
- backdrop_delegate_->OnWindowAddedToLayout(child); |
- WindowPositioner::RearrangeVisibleWindowOnShow(child); |
+ backdrop_delegate_->OnWindowAddedToLayout(WmWindow::Get(child)); |
+ WindowPositioner::RearrangeVisibleWindowOnShow(WmWindow::Get(child)); |
if (Shell::Get()->screen_pinning_controller()->IsPinned()) |
- child->GetWindowState()->DisableAlwaysOnTop(nullptr); |
+ wm::GetWindowState(child)->DisableAlwaysOnTop(nullptr); |
} |
-void WorkspaceLayoutManager::OnWillRemoveWindowFromLayout(WmWindow* child) { |
+void WorkspaceLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) { |
windows_.erase(child); |
- child->aura_window()->RemoveObserver(this); |
- child->GetWindowState()->RemoveObserver(this); |
+ child->RemoveObserver(this); |
+ wm::GetWindowState(child)->RemoveObserver(this); |
- if (child->GetTargetVisibility()) |
- WindowPositioner::RearrangeVisibleWindowOnHideOrRemove(child); |
+ if (child->layer()->GetTargetVisibility()) |
+ WindowPositioner::RearrangeVisibleWindowOnHideOrRemove( |
+ WmWindow::Get(child)); |
} |
-void WorkspaceLayoutManager::OnWindowRemovedFromLayout(WmWindow* child) { |
+void WorkspaceLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) { |
UpdateShelfVisibility(); |
UpdateFullscreenState(); |
if (backdrop_delegate_) |
- backdrop_delegate_->OnWindowRemovedFromLayout(child); |
+ backdrop_delegate_->OnWindowRemovedFromLayout(WmWindow::Get(child)); |
} |
-void WorkspaceLayoutManager::OnChildWindowVisibilityChanged(WmWindow* child, |
+void WorkspaceLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child, |
bool visible) { |
- wm::WindowState* window_state = child->GetWindowState(); |
+ wm::WindowState* window_state = wm::GetWindowState(child); |
// Attempting to show a minimized window. Unminimize it. |
if (visible && window_state->IsMinimized()) |
window_state->Unminimize(); |
- if (child->GetTargetVisibility()) |
- WindowPositioner::RearrangeVisibleWindowOnShow(child); |
+ if (child->layer()->GetTargetVisibility()) |
+ WindowPositioner::RearrangeVisibleWindowOnShow(WmWindow::Get(child)); |
else |
- WindowPositioner::RearrangeVisibleWindowOnHideOrRemove(child); |
+ WindowPositioner::RearrangeVisibleWindowOnHideOrRemove( |
+ WmWindow::Get(child)); |
UpdateFullscreenState(); |
UpdateShelfVisibility(); |
- if (backdrop_delegate_) |
- backdrop_delegate_->OnChildWindowVisibilityChanged(child, visible); |
+ if (backdrop_delegate_) { |
+ backdrop_delegate_->OnChildWindowVisibilityChanged(WmWindow::Get(child), |
+ visible); |
+ } |
} |
-void WorkspaceLayoutManager::SetChildBounds(WmWindow* child, |
+void WorkspaceLayoutManager::SetChildBounds(aura::Window* child, |
const gfx::Rect& requested_bounds) { |
wm::SetBoundsEvent event(wm::WM_EVENT_SET_BOUNDS, requested_bounds); |
- child->GetWindowState()->OnWMEvent(&event); |
+ wm::GetWindowState(child)->OnWMEvent(&event); |
UpdateShelfVisibility(); |
} |
@@ -144,7 +149,7 @@ void WorkspaceLayoutManager::OnKeyboardBoundsChanging( |
if (!change_work_area) |
return; |
- WmWindow* window = WmWindow::Get(wm::GetActiveWindow()); |
+ aura::Window* window = wm::GetActiveWindow(); |
if (!window) |
return; |
@@ -152,7 +157,7 @@ void WorkspaceLayoutManager::OnKeyboardBoundsChanging( |
if (!window_->Contains(window)) |
return; |
- wm::WindowState* window_state = window->GetWindowState(); |
+ wm::WindowState* window_state = wm::GetWindowState(window); |
if (window_state->ignore_keyboard_bounds_change()) |
return; |
@@ -162,8 +167,8 @@ void WorkspaceLayoutManager::OnKeyboardBoundsChanging( |
if (!window_state->HasRestoreBounds()) |
window_state->SaveCurrentBoundsForRestore(); |
- gfx::Rect window_bounds = |
- window_->ConvertRectToScreen(window->GetTargetBounds()); |
+ gfx::Rect window_bounds(window->GetTargetBounds()); |
+ ::wm::ConvertRectToScreen(window_, &window_bounds); |
int vertical_displacement = |
std::max(0, window_bounds.bottom() - new_bounds.y()); |
int shift = std::min(vertical_displacement, |
@@ -195,15 +200,14 @@ void WorkspaceLayoutManager::OnWindowHierarchyChanged( |
// If the window is already tracked by the workspace this update would be |
// redundant as the fullscreen and shelf state would have been handled in |
// OnWindowAddedToLayout. |
- if (windows_.find(WmWindow::Get(params.target)) != windows_.end()) |
+ if (windows_.find(params.target) != windows_.end()) |
return; |
// If the active window has moved to this root window then update the |
// fullscreen state. |
// TODO(flackr): Track the active window leaving this root window and update |
// the fullscreen state accordingly. |
- if (params.new_parent && |
- WmWindow::Get(params.new_parent->GetRootWindow()) == root_window_) { |
+ if (params.new_parent && params.new_parent->GetRootWindow() == root_window_) { |
UpdateFullscreenState(); |
UpdateShelfVisibility(); |
} |
@@ -214,11 +218,12 @@ void WorkspaceLayoutManager::OnWindowPropertyChanged(aura::Window* window, |
intptr_t old) { |
if (key == aura::client::kAlwaysOnTopKey && |
window->GetProperty(aura::client::kAlwaysOnTopKey)) { |
- WmWindow* container = |
- root_window_controller_->always_on_top_controller()->GetContainer( |
- WmWindow::Get(window)); |
- if (WmWindow::Get(window->parent()) != container) |
- container->AddChild(WmWindow::Get(window)); |
+ aura::Window* container = |
+ root_window_controller_->always_on_top_controller() |
+ ->GetContainer(WmWindow::Get(window)) |
+ ->aura_window(); |
+ if (window->parent() != container) |
+ container->AddChild(window); |
} |
} |
@@ -230,8 +235,8 @@ void WorkspaceLayoutManager::OnWindowStackingChanged(aura::Window* window) { |
} |
void WorkspaceLayoutManager::OnWindowDestroying(aura::Window* window) { |
- if (root_window_ == WmWindow::Get(window)) { |
- root_window_->aura_window()->RemoveObserver(this); |
+ if (root_window_ == window) { |
+ root_window_->RemoveObserver(this); |
root_window_ = nullptr; |
} |
} |
@@ -240,7 +245,7 @@ void WorkspaceLayoutManager::OnWindowBoundsChanged( |
aura::Window* window, |
const gfx::Rect& old_bounds, |
const gfx::Rect& new_bounds) { |
- if (root_window_ == WmWindow::Get(window)) { |
+ if (root_window_ == window) { |
const wm::WMEvent wm_event(wm::WM_EVENT_DISPLAY_BOUNDS_CHANGED); |
AdjustAllWindowsBoundsForWorkAreaChange(&wm_event); |
} |
@@ -253,11 +258,10 @@ void WorkspaceLayoutManager::OnWindowBoundsChanged( |
void WorkspaceLayoutManager::OnWindowActivated(ActivationReason reason, |
aura::Window* gained_active, |
aura::Window* lost_active) { |
- WmWindow* wm_gained_active = WmWindow::Get(gained_active); |
wm::WindowState* window_state = |
- wm_gained_active ? wm_gained_active->GetWindowState() : nullptr; |
+ gained_active ? wm::GetWindowState(gained_active) : nullptr; |
if (window_state && window_state->IsMinimized() && |
- !wm_gained_active->IsVisible()) { |
+ !gained_active->IsVisible()) { |
window_state->Unminimize(); |
DCHECK(!window_state->IsMinimized()); |
} |
@@ -288,11 +292,13 @@ void WorkspaceLayoutManager::OnPostWindowStateTypeChange( |
void WorkspaceLayoutManager::OnDisplayMetricsChanged( |
const display::Display& display, |
uint32_t changed_metrics) { |
- if (window_->GetDisplayNearestWindow().id() != display.id()) |
+ if (display::Screen::GetScreen()->GetDisplayNearestWindow(window_).id() != |
+ display.id()) { |
return; |
+ } |
const gfx::Rect work_area( |
- ScreenUtil::GetDisplayWorkAreaBoundsInParent(window_->aura_window())); |
+ ScreenUtil::GetDisplayWorkAreaBoundsInParent(window_)); |
if (work_area != work_area_in_parent_) { |
const wm::WMEvent event(wm::WM_EVENT_WORKAREA_BOUNDS_CHANGED); |
AdjustAllWindowsBoundsForWorkAreaChange(&event); |
@@ -304,8 +310,10 @@ void WorkspaceLayoutManager::OnDisplayMetricsChanged( |
void WorkspaceLayoutManager::OnFullscreenStateChanged(bool is_fullscreen, |
WmWindow* root_window) { |
- if (root_window != root_window_ || is_fullscreen_ == is_fullscreen) |
+ if (root_window->aura_window() != root_window_ || |
+ is_fullscreen_ == is_fullscreen) { |
return; |
+ } |
is_fullscreen_ = is_fullscreen; |
if (Shell::Get()->screen_pinning_controller()->IsPinned()) { |
@@ -329,14 +337,14 @@ void WorkspaceLayoutManager::OnPinnedStateChanged(WmWindow* pinned_window) { |
return; |
} |
- UpdateAlwaysOnTop(is_pinned ? pinned_window : nullptr); |
+ UpdateAlwaysOnTop(is_pinned ? pinned_window->aura_window() : nullptr); |
} |
void WorkspaceLayoutManager::OnVirtualKeyboardStateChanged( |
bool activated, |
WmWindow* root_window) { |
- UpdateKeyboardObserverFromStateChanged(activated, root_window, root_window_, |
- &keyboard_observer_); |
+ UpdateKeyboardObserverFromStateChanged( |
+ activated, root_window, WmWindow::Get(root_window_), &keyboard_observer_); |
} |
////////////////////////////////////////////////////////////////////////////// |
@@ -347,8 +355,7 @@ void WorkspaceLayoutManager::AdjustAllWindowsBoundsForWorkAreaChange( |
DCHECK(event->type() == wm::WM_EVENT_DISPLAY_BOUNDS_CHANGED || |
event->type() == wm::WM_EVENT_WORKAREA_BOUNDS_CHANGED); |
- work_area_in_parent_ = |
- ScreenUtil::GetDisplayWorkAreaBoundsInParent(window_->aura_window()); |
+ work_area_in_parent_ = ScreenUtil::GetDisplayWorkAreaBoundsInParent(window_); |
// Don't do any adjustments of the insets while we are in screen locked mode. |
// This would happen if the launcher was auto hidden before the login screen |
@@ -362,8 +369,8 @@ void WorkspaceLayoutManager::AdjustAllWindowsBoundsForWorkAreaChange( |
// We also do this when developers running Aura on a desktop manually resize |
// the host window. |
// We also need to do this when the work area insets changes. |
- for (WmWindow* window : windows_) |
- window->GetWindowState()->OnWMEvent(event); |
+ for (aura::Window* window : windows_) |
+ wm::GetWindowState(window)->OnWMEvent(event); |
} |
void WorkspaceLayoutManager::UpdateShelfVisibility() { |
@@ -377,25 +384,26 @@ void WorkspaceLayoutManager::UpdateFullscreenState() { |
// only windows in the default workspace container will go fullscreen but |
// this should really be tracked by the RootWindowController since |
// technically any container could get a fullscreen window. |
- if (window_->aura_window()->id() != kShellWindowId_DefaultContainer) |
+ if (window_->id() != kShellWindowId_DefaultContainer) |
return; |
bool is_fullscreen = wm::GetWindowForFullscreenMode(window_) != nullptr; |
if (is_fullscreen != is_fullscreen_) { |
- Shell::Get()->NotifyFullscreenStateChanged(is_fullscreen, root_window_); |
+ Shell::Get()->NotifyFullscreenStateChanged(is_fullscreen, |
+ WmWindow::Get(root_window_)); |
is_fullscreen_ = is_fullscreen; |
} |
} |
-void WorkspaceLayoutManager::UpdateAlwaysOnTop(WmWindow* window_on_top) { |
+void WorkspaceLayoutManager::UpdateAlwaysOnTop(aura::Window* window_on_top) { |
// Changing always on top state may change window's parent. Iterate on a copy |
// of |windows_| to avoid invalidating an iterator. Since both workspace and |
// always_on_top containers' layouts are managed by this class all the |
// appropriate windows will be included in the iteration. |
WindowSet windows(windows_); |
- for (auto* window : windows) { |
- wm::WindowState* window_state = window->GetWindowState(); |
+ for (aura::Window* window : windows) { |
+ wm::WindowState* window_state = wm::GetWindowState(window); |
if (window_on_top) |
- window_state->DisableAlwaysOnTop(window_on_top); |
+ window_state->DisableAlwaysOnTop(WmWindow::Get(window_on_top)); |
else |
window_state->RestoreAlwaysOnTop(); |
} |