fix: don't call SetBounds on restore (#19886)
This commit is contained in:
parent
cddbddc543
commit
d04072d1eb
3 changed files with 20 additions and 67 deletions
|
@ -305,7 +305,6 @@ NativeWindowViews::NativeWindowViews(const mate::Dictionary& options,
|
||||||
last_window_state_ = ui::SHOW_STATE_FULLSCREEN;
|
last_window_state_ = ui::SHOW_STATE_FULLSCREEN;
|
||||||
else
|
else
|
||||||
last_window_state_ = ui::SHOW_STATE_NORMAL;
|
last_window_state_ = ui::SHOW_STATE_NORMAL;
|
||||||
last_normal_bounds_ = GetBounds();
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX)
|
||||||
|
|
|
@ -246,23 +246,6 @@ class NativeWindowViews : public NativeWindow,
|
||||||
|
|
||||||
gfx::Rect last_normal_placement_bounds_;
|
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.
|
// In charge of running taskbar related APIs.
|
||||||
TaskbarHost taskbar_host_;
|
TaskbarHost taskbar_host_;
|
||||||
|
|
||||||
|
|
|
@ -409,10 +409,6 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
|
||||||
case WM_SIZE: {
|
case WM_SIZE: {
|
||||||
// Handle window state change.
|
// Handle window state change.
|
||||||
HandleSizeEvent(w_param, l_param);
|
HandleSizeEvent(w_param, l_param);
|
||||||
|
|
||||||
consecutive_moves_ = false;
|
|
||||||
last_normal_bounds_before_move_ = last_normal_bounds_;
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case WM_MOVING: {
|
case WM_MOVING: {
|
||||||
|
@ -428,15 +424,6 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
|
||||||
}
|
}
|
||||||
return false;
|
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: {
|
case WM_ENDSESSION: {
|
||||||
if (w_param) {
|
if (w_param) {
|
||||||
NotifyWindowEndSession();
|
NotifyWindowEndSession();
|
||||||
|
@ -467,9 +454,6 @@ void NativeWindowViews::HandleSizeEvent(WPARAM w_param, LPARAM l_param) {
|
||||||
switch (w_param) {
|
switch (w_param) {
|
||||||
case SIZE_MAXIMIZED: {
|
case SIZE_MAXIMIZED: {
|
||||||
last_window_state_ = ui::SHOW_STATE_MAXIMIZED;
|
last_window_state_ = ui::SHOW_STATE_MAXIMIZED;
|
||||||
if (consecutive_moves_) {
|
|
||||||
last_normal_bounds_ = last_normal_bounds_before_move_;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!has_frame()) {
|
if (!has_frame()) {
|
||||||
TriggerNCCalcSize(GetAcceleratedWidget());
|
TriggerNCCalcSize(GetAcceleratedWidget());
|
||||||
|
@ -491,40 +475,27 @@ void NativeWindowViews::HandleSizeEvent(WPARAM w_param, LPARAM l_param) {
|
||||||
NotifyWindowMinimize();
|
NotifyWindowMinimize();
|
||||||
break;
|
break;
|
||||||
case SIZE_RESTORED:
|
case SIZE_RESTORED:
|
||||||
if (last_window_state_ == ui::SHOW_STATE_NORMAL) {
|
switch (last_window_state_) {
|
||||||
// Window was resized so we save it's new size.
|
case ui::SHOW_STATE_MAXIMIZED:
|
||||||
last_normal_bounds_ = GetBounds();
|
last_window_state_ = ui::SHOW_STATE_NORMAL;
|
||||||
last_normal_bounds_before_move_ = last_normal_bounds_;
|
NotifyWindowUnmaximize();
|
||||||
} else {
|
|
||||||
switch (last_window_state_) {
|
if (!has_frame()) {
|
||||||
case ui::SHOW_STATE_MAXIMIZED:
|
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;
|
last_window_state_ = ui::SHOW_STATE_NORMAL;
|
||||||
NotifyWindowUnmaximize();
|
NotifyWindowRestore();
|
||||||
|
}
|
||||||
if (!has_frame()) {
|
break;
|
||||||
TriggerNCCalcSize(GetAcceleratedWidget());
|
default:
|
||||||
}
|
break;
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue