Chromium Code Reviews| Index: ash/wm/caption_buttons/frame_maximize_button.cc |
| diff --git a/ash/wm/caption_buttons/frame_maximize_button.cc b/ash/wm/caption_buttons/frame_maximize_button.cc |
| index 16b98fecdee84b398995454bf3cef92b28e0e312..439f5ab14fb7ddd0e83ecb5df42446c43c4a8de5 100644 |
| --- a/ash/wm/caption_buttons/frame_maximize_button.cc |
| +++ b/ash/wm/caption_buttons/frame_maximize_button.cc |
| @@ -38,9 +38,7 @@ const int kUpdateDelayMS = 400; |
| // The delay of the bubble appearance. |
| const int kBubbleAppearanceDelayMS = 500; |
| -// The minimum sanp size in percent of the screen width. |
| -const int kMinSnapSizePercent = 50; |
| -} |
| +} // namespace |
| // EscapeEventFilter is installed on the RootWindow to track when the escape key |
| // is pressed. We use an EventFilter for this as the FrameMaximizeButton |
| @@ -149,10 +147,11 @@ void FrameMaximizeButton::SnapButtonHovered(SnapType type) { |
| } |
| void FrameMaximizeButton::ExecuteSnapAndCloseMenu(SnapType snap_type) { |
| - // We can come here with no snap type set in case that the mouse opened the |
| - // maximize button and a touch event "touched" a button. |
| - if (snap_type_ == SNAP_NONE) |
| + if (snap_type_ != snap_type) { |
| + // This occurs if the mouse opened the maximize bubble and a user "touched" |
| + // one of the maximize bubble's buttons. |
| SnapButtonHovered(snap_type); |
| + } |
| Cancel(true); |
| // Tell our menu to close. |
| @@ -191,12 +190,18 @@ void FrameMaximizeButton::OnWindowDestroying(aura::Window* window) { |
| maximizer_.reset(); |
| if (observing_frame_) { |
| CHECK_EQ(frame_->GetNativeWindow(), window); |
| - frame_->GetNativeWindow()->RemoveObserver(this); |
| + window->RemoveObserver(this); |
| + wm::GetWindowState(window)->RemoveObserver(this); |
| frame_->RemoveObserver(this); |
| observing_frame_ = false; |
| } |
| } |
| +void FrameMaximizeButton::OnWindowShowTypeChanged(wm::WindowState* window_state, |
| + wm::WindowShowType old_type) { |
| + Cancel(false); |
| +} |
| + |
| void FrameMaximizeButton::OnWidgetActivationChanged(views::Widget* widget, |
| bool active) { |
| // Upon losing focus, the bubble menu and the phantom window should hide. |
| @@ -224,7 +229,9 @@ void FrameMaximizeButton::OnMouseEntered(const ui::MouseEvent& event) { |
| DCHECK(GetWidget()); |
| if (!observing_frame_) { |
| observing_frame_ = true; |
| - frame_->GetNativeWindow()->AddObserver(this); |
| + aura::Window* window = frame_->GetNativeWindow(); |
| + window->AddObserver(this); |
| + wm::GetWindowState(window)->RemoveObserver(this); |
|
Mr4D (OOO till 08-26)
2014/02/13 15:14:32
Shouldn't this be an AddObserver?
|
| frame_->AddObserver(this); |
| } |
| maximizer_.reset(new MaximizeBubbleController( |
| @@ -558,31 +565,23 @@ MaximizeBubbleFrameState |
| FrameMaximizeButton::GetMaximizeBubbleFrameState() const { |
| wm::WindowState* window_state = |
| wm::GetWindowState(frame_->GetNativeWindow()); |
| - // When there are no restore bounds, we are in normal mode. |
| - if (!window_state->HasRestoreBounds()) |
| - return FRAME_STATE_NONE; |
| - // The normal maximized test can be used. |
| - if (frame_->IsMaximized()) |
| - return FRAME_STATE_FULL; |
| - // For Left/right maximize we need to check the dimensions. |
| - gfx::Rect bounds = frame_->GetWindowBoundsInScreen(); |
| - gfx::Rect screen = Shell::GetScreen()->GetDisplayNearestWindow( |
| - frame_->GetNativeView()).work_area(); |
| - if (bounds.width() < (screen.width() * kMinSnapSizePercent) / 100) |
| - return FRAME_STATE_NONE; |
| - // We might still have a horizontally filled window at this point which we |
| - // treat as no special state. |
| - if (bounds.y() != screen.y() || bounds.height() != screen.height()) |
| - return FRAME_STATE_NONE; |
| - |
| - // We have to be in a maximize mode at this point. |
| - if (bounds.x() == screen.x()) |
| - return FRAME_STATE_SNAP_LEFT; |
| - if (bounds.right() == screen.right()) |
| - return FRAME_STATE_SNAP_RIGHT; |
| - // If we come here, it is likely caused by the fact that the |
| - // "VerticalResizeDoubleClick" stored a restore rectangle. In that case |
| - // we allow all maximize operations (and keep the restore rectangle). |
| + switch (window_state->window_show_type()) { |
| + case wm::SHOW_TYPE_MAXIMIZED: |
| + case wm::SHOW_TYPE_FULLSCREEN: |
| + return FRAME_STATE_FULL; |
| + case wm::SHOW_TYPE_LEFT_SNAPPED: |
| + return FRAME_STATE_SNAP_LEFT; |
| + case wm::SHOW_TYPE_RIGHT_SNAPPED: |
| + return FRAME_STATE_SNAP_RIGHT; |
| + case wm::SHOW_TYPE_DEFAULT: |
| + case wm::SHOW_TYPE_NORMAL: |
| + case wm::SHOW_TYPE_MINIMIZED: |
| + case wm::SHOW_TYPE_INACTIVE: |
| + case wm::SHOW_TYPE_DETACHED: |
| + case wm::SHOW_TYPE_END: |
| + case wm::SHOW_TYPE_AUTO_POSITIONED: |
| + return FRAME_STATE_NONE; |
| + } |
| return FRAME_STATE_NONE; |
| } |