| Index: athena/wm/window_manager_impl.cc
|
| diff --git a/athena/wm/window_manager_impl.cc b/athena/wm/window_manager_impl.cc
|
| index c8c1caccc01060c1261b40e0ef2a0682aaaba28a..f29d8e4f3bcced7edeade9fd2840a5a8dc8ace9a 100644
|
| --- a/athena/wm/window_manager_impl.cc
|
| +++ b/athena/wm/window_manager_impl.cc
|
| @@ -16,8 +16,10 @@
|
| #include "athena/wm/window_overview_mode.h"
|
| #include "base/bind.h"
|
| #include "base/logging.h"
|
| +#include "ui/aura/client/aura_constants.h"
|
| #include "ui/aura/layout_manager.h"
|
| #include "ui/aura/window.h"
|
| +#include "ui/aura/window_delegate.h"
|
| #include "ui/compositor/closure_animation_observer.h"
|
| #include "ui/compositor/scoped_layer_animation_settings.h"
|
| #include "ui/gfx/display.h"
|
| @@ -40,6 +42,16 @@ void SetWindowState(aura::Window* window,
|
| window->SetTransform(transform);
|
| }
|
|
|
| +// Tests whether the given window can be maximized
|
| +bool CanWindowMaximize(const aura::Window* const window) {
|
| + const aura::WindowDelegate* delegate = window->delegate();
|
| + const bool no_max_size =
|
| + !delegate || delegate->GetMaximumSize().IsEmpty();
|
| + return no_max_size &&
|
| + window->GetProperty(aura::client::kCanMaximizeKey) &&
|
| + window->GetProperty(aura::client::kCanResizeKey);
|
| +}
|
| +
|
| } // namespace
|
|
|
| class AthenaContainerLayoutManager : public aura::LayoutManager {
|
| @@ -91,11 +103,10 @@ void AthenaContainerLayoutManager::OnWindowResized() {
|
| else if (window == instance->split_view_controller_->right_window())
|
| window->SetBounds(
|
| gfx::Rect(gfx::Point(split_size.width(), 0), split_size));
|
| - else
|
| + else if (CanWindowMaximize(window))
|
| + window->SetBounds(gfx::Rect(work_area));
|
| + } else if (CanWindowMaximize(window))
|
| window->SetBounds(gfx::Rect(work_area));
|
| - } else {
|
| - window->SetBounds(gfx::Rect(work_area));
|
| - }
|
| }
|
| }
|
|
|
| @@ -119,6 +130,14 @@ void AthenaContainerLayoutManager::OnWindowRemovedFromLayout(
|
| void AthenaContainerLayoutManager::OnChildWindowVisibilityChanged(
|
| aura::Window* child,
|
| bool visible) {
|
| + if (visible && CanWindowMaximize(child)) {
|
| + // Make sure we're resizing a window that actually exists in the window list
|
| + // to avoid resizing the divider in the split mode.
|
| + if(instance->window_list_provider_->IsWindowInList(child)) {
|
| + child->SetBounds(
|
| + gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area());
|
| + }
|
| + }
|
| }
|
|
|
| void AthenaContainerLayoutManager::SetChildBounds(
|
| @@ -291,7 +310,11 @@ void WindowManagerImpl::OnSelectWindow(aura::Window* window) {
|
| // resized.
|
| const gfx::Size work_area =
|
| gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area().size();
|
| - if (window->GetTargetBounds().size() != work_area) {
|
| +
|
| + // Resize to the screen bounds only if the window is maximize-able, and
|
| + // is not already maximized
|
| + if (window->GetTargetBounds().size() != work_area &&
|
| + CanWindowMaximize(window)) {
|
| const gfx::Rect& window_bounds = window->bounds();
|
| const gfx::Rect desired_bounds(work_area);
|
| gfx::Transform transform;
|
|
|