Skip to content

Commit

Permalink
fix: don't call SetBounds on restore (#19956)
Browse files Browse the repository at this point in the history
  • Loading branch information
trop[bot] authored and codebytere committed Aug 27, 2019
1 parent a5ed8fb commit 0b5a737
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 67 deletions.
1 change: 0 additions & 1 deletion atom/browser/native_window_views.cc
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,6 @@ NativeWindowViews::NativeWindowViews(const mate::Dictionary& options,
last_window_state_ = ui::SHOW_STATE_FULLSCREEN;
else
last_window_state_ = ui::SHOW_STATE_NORMAL;
last_normal_bounds_ = GetBounds();
#endif

#if defined(OS_LINUX)
Expand Down
17 changes: 0 additions & 17 deletions atom/browser/native_window_views.h
Original file line number Diff line number Diff line change
Expand Up @@ -241,23 +241,6 @@ class NativeWindowViews : public NativeWindow,

gfx::Rect last_normal_placement_bounds_;

// There's an issue with restore on Windows, that sometimes causes the Window
// to receive the wrong size (#2498). To circumvent that, we keep tabs on the
// 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
// sized (WM_SIZE). In this case, last_normal_bounds_ should not update. We
// keep last_normal_bounds_candidate_ as a candidate which will become valid
// last_normal_bounds_ if the moves are consecutive with no WM_SIZE event in
// between.
gfx::Rect last_normal_bounds_candidate_;

bool consecutive_moves_;

// In charge of running taskbar related APIs.
TaskbarHost taskbar_host_;

Expand Down
69 changes: 20 additions & 49 deletions atom/browser/native_window_views_win.cc
Original file line number Diff line number Diff line change
Expand Up @@ -409,10 +409,6 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
case WM_SIZE: {
// 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: {
Expand All @@ -428,15 +424,6 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
}
return false;
}
case WM_MOVE: {
if (last_window_state_ == ui::SHOW_STATE_NORMAL) {
if (consecutive_moves_)
last_normal_bounds_ = last_normal_bounds_candidate_;
last_normal_bounds_candidate_ = GetBounds();
consecutive_moves_ = true;
}
return false;
}
case WM_ENDSESSION: {
if (w_param) {
NotifyWindowEndSession();
Expand Down Expand Up @@ -467,9 +454,6 @@ void NativeWindowViews::HandleSizeEvent(WPARAM w_param, LPARAM l_param) {
switch (w_param) {
case SIZE_MAXIMIZED: {
last_window_state_ = ui::SHOW_STATE_MAXIMIZED;
if (consecutive_moves_) {
last_normal_bounds_ = last_normal_bounds_before_move_;
}

if (!has_frame()) {
TriggerNCCalcSize(GetAcceleratedWidget());
Expand All @@ -491,40 +475,27 @@ void NativeWindowViews::HandleSizeEvent(WPARAM w_param, LPARAM l_param) {
NotifyWindowMinimize();
break;
case SIZE_RESTORED:
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:
switch (last_window_state_) {
case ui::SHOW_STATE_MAXIMIZED:
last_window_state_ = ui::SHOW_STATE_NORMAL;
NotifyWindowUnmaximize();

if (!has_frame()) {
TriggerNCCalcSize(GetAcceleratedWidget());
}

break;
case ui::SHOW_STATE_MINIMIZED:
if (IsFullscreen()) {
last_window_state_ = ui::SHOW_STATE_FULLSCREEN;
NotifyWindowEnterFullScreen();
} else {
last_window_state_ = ui::SHOW_STATE_NORMAL;
NotifyWindowUnmaximize();

if (!has_frame()) {
TriggerNCCalcSize(GetAcceleratedWidget());
}

break;
case ui::SHOW_STATE_MINIMIZED:
if (IsFullscreen()) {
last_window_state_ = ui::SHOW_STATE_FULLSCREEN;
NotifyWindowEnterFullScreen();
} else {
last_window_state_ = ui::SHOW_STATE_NORMAL;

// When the window is restored we resize it to the previous known
// normal size.
if (has_frame()) {
SetBounds(last_normal_bounds_, false);
}

NotifyWindowRestore();
}
break;
default:
break;
}
NotifyWindowRestore();
}
break;
default:
break;
}
break;
}
Expand Down

0 comments on commit 0b5a737

Please sign in to comment.