// size of the window while in the normal state (not maximized, minimized or
// fullscreen), so we restore it correctly.
gfx::Rect last_normal_bounds_;
+ gfx::Rect last_normal_bounds_before_move_;
// last_normal_bounds_ may or may not require update on WM_MOVE. When a
// window is maximized, it is moved (WM_MOVE) to maximum size first and then
return taskbar_host_.HandleThumbarButtonEvent(LOWORD(w_param));
return false;
case WM_SIZE: {
- consecutive_moves_ = false;
// Handle window state change.
HandleSizeEvent(w_param, l_param);
+
+ consecutive_moves_ = false;
+ last_normal_bounds_before_move_ = last_normal_bounds_;
+
return false;
}
case WM_MOVING: {
switch (w_param) {
case SIZE_MAXIMIZED:
last_window_state_ = ui::SHOW_STATE_MAXIMIZED;
+ if (consecutive_moves_) {
+ last_normal_bounds_ = last_normal_bounds_before_move_;
+ }
NotifyWindowMaximize();
break;
case SIZE_MINIMIZED:
if (last_window_state_ == ui::SHOW_STATE_NORMAL) {
// Window was resized so we save it's new size.
last_normal_bounds_ = GetBounds();
+ last_normal_bounds_before_move_ = last_normal_bounds_;
} else {
switch (last_window_state_) {
case ui::SHOW_STATE_MAXIMIZED:
last_window_state_ = ui::SHOW_STATE_NORMAL;
- // When the window is restored we resize it to the previous known
- // normal size.
- SetBounds(last_normal_bounds_, false);
+ // Don't force out last known bounds onto the window as Windows
+ // actually gets these correct
NotifyWindowUnmaximize();
break;