Index: athena/wm/window_manager_impl.cc |
diff --git a/athena/wm/window_manager_impl.cc b/athena/wm/window_manager_impl.cc |
index 3dd9612467b06b42c2a23922e7f8a3189708965f..bbc86735050d849dd93245c9822a90b518377661 100644 |
--- a/athena/wm/window_manager_impl.cc |
+++ b/athena/wm/window_manager_impl.cc |
@@ -17,6 +17,8 @@ |
#include "base/logging.h" |
#include "ui/aura/layout_manager.h" |
#include "ui/aura/window.h" |
+#include "ui/gfx/display.h" |
+#include "ui/gfx/screen.h" |
#include "ui/wm/core/shadow_controller.h" |
#include "ui/wm/core/window_util.h" |
#include "ui/wm/core/wm_state.h" |
@@ -25,8 +27,8 @@ |
namespace athena { |
namespace { |
- |
class WindowManagerImpl* instance = NULL; |
+} // namespace |
class AthenaContainerLayoutManager : public aura::LayoutManager { |
public: |
@@ -54,11 +56,47 @@ AthenaContainerLayoutManager::~AthenaContainerLayoutManager() { |
} |
void AthenaContainerLayoutManager::OnWindowResized() { |
- instance->Layout(); |
+ // Resize all the existing windows. |
+ aura::Window::Windows list = instance->window_list_provider_->GetWindowList(); |
+ const gfx::Size work_area = |
+ gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area().size(); |
+ bool is_splitview = instance->split_view_controller_->IsSplitViewModeActive(); |
+ gfx::Size split_size; |
+ if (is_splitview) { |
+ CHECK(instance->split_view_controller_->left_window()); |
+ split_size = |
+ instance->split_view_controller_->left_window()->bounds().size(); |
+ } |
+ |
+ for (aura::Window::Windows::const_iterator iter = list.begin(); |
+ iter != list.end(); |
+ ++iter) { |
+ aura::Window* window = *iter; |
+ if (is_splitview) { |
+ if (window == instance->split_view_controller_->left_window()) |
+ window->SetBounds(gfx::Rect(split_size)); |
+ else if (window == instance->split_view_controller_->right_window()) |
+ window->SetBounds( |
+ gfx::Rect(gfx::Point(split_size.width(), 0), split_size)); |
+ else |
+ window->SetBounds(gfx::Rect(work_area)); |
+ } else { |
+ window->SetBounds(gfx::Rect(work_area)); |
+ } |
+ } |
} |
void AthenaContainerLayoutManager::OnWindowAddedToLayout(aura::Window* child) { |
- instance->Layout(); |
+ aura::Window::Windows list = instance->window_list_provider_->GetWindowList(); |
+ if (std::find(list.begin(), list.end(), child) == list.end()) |
+ return; |
+ aura::Window* window = NULL; |
+ if (instance->split_view_controller_->IsSplitViewModeActive()) |
+ window = instance->split_view_controller_->left_window(); |
+ else |
+ window = instance->container_.get(); |
+ CHECK(window); |
+ child->SetBounds(gfx::Rect(window->bounds().size())); |
} |
void AthenaContainerLayoutManager::OnWillRemoveWindowFromLayout( |
@@ -67,13 +105,11 @@ void AthenaContainerLayoutManager::OnWillRemoveWindowFromLayout( |
void AthenaContainerLayoutManager::OnWindowRemovedFromLayout( |
aura::Window* child) { |
- instance->Layout(); |
} |
void AthenaContainerLayoutManager::OnChildWindowVisibilityChanged( |
aura::Window* child, |
bool visible) { |
- instance->Layout(); |
} |
void AthenaContainerLayoutManager::SetChildBounds( |
@@ -83,8 +119,6 @@ void AthenaContainerLayoutManager::SetChildBounds( |
SetChildBoundsDirect(child, requested_bounds); |
} |
-} // namespace |
- |
WindowManagerImpl::WindowManagerImpl() { |
ScreenManager::ContainerParams params("DefaultContainer", CP_DEFAULT); |
params.can_activate_children = true; |
@@ -120,19 +154,6 @@ WindowManagerImpl::~WindowManagerImpl() { |
instance = NULL; |
} |
-void WindowManagerImpl::Layout() { |
- if (!container_) |
- return; |
- gfx::Rect bounds = gfx::Rect(container_->bounds().size()); |
- const aura::Window::Windows& children = container_->children(); |
- for (aura::Window::Windows::const_iterator iter = children.begin(); |
- iter != children.end(); |
- ++iter) { |
- if ((*iter)->type() == ui::wm::WINDOW_TYPE_NORMAL) |
- (*iter)->SetBounds(bounds); |
- } |
-} |
- |
void WindowManagerImpl::ToggleOverview() { |
SetInOverview(overview_.get() == NULL); |
} |