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

Unified Diff: ash/wm/workspace/workspace_layout_manager.cc

Issue 2861243003: chromeos: Converts WorkspaceLayoutManager to aura::LayoutManager (Closed)
Patch Set: feedback Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
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();
}
« no previous file with comments | « ash/wm/workspace/workspace_layout_manager.h ('k') | ash/wm/workspace/workspace_layout_manager_keyboard_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698