Index: ash/wm/window_state.cc |
diff --git a/ash/wm/window_state.cc b/ash/wm/window_state.cc |
index e60dc34fceb106f39fdc74e3ddf3639b73bf1c9c..e95dc4060222015b22b6c1f0da4b5486fd5b6e00 100644 |
--- a/ash/wm/window_state.cc |
+++ b/ash/wm/window_state.cc |
@@ -141,7 +141,15 @@ bool WindowState::IsDocked() const { |
} |
bool WindowState::CanMaximize() const { |
- return window_->GetProperty(aura::client::kCanMaximizeKey); |
+ // Window must have the kCanMaximizeKey and have no maximum width or height. |
+ if (!window()->GetProperty(aura::client::kCanMaximizeKey)) |
+ return false; |
+ |
+ if (!window()->delegate()) |
+ return true; |
+ |
+ gfx::Size max_size = window_->delegate()->GetMaximumSize(); |
+ return !max_size.width() && !max_size.height(); |
} |
bool WindowState::CanMinimize() const { |
@@ -168,10 +176,10 @@ bool WindowState::CanSnap() const { |
if (!CanResize() || window_->type() == ui::wm::WINDOW_TYPE_PANEL || |
::wm::GetTransientParent(window_)) |
return false; |
- // If a window has a maximum size defined, snapping may make it too big. |
- // TODO(oshima): We probably should snap if possible. |
- return window_->delegate() ? window_->delegate()->GetMaximumSize().IsEmpty() : |
- true; |
+ // If a window cannot be maximized, assume it cannot snap either. |
+ // TODO(oshima): We should probably snap if the maximum size is greater than |
+ // the snapped size. |
+ return CanMaximize(); |
} |
bool WindowState::HasRestoreBounds() const { |