fix: pend bounds change when moving BrowserWindows (#33288)

* fix: ensure bounds changes apply when moving windows

* chore: remove unused queue include
This commit is contained in:
Shelley Vohr 2022-03-22 07:07:09 +01:00 committed by GitHub
parent c262eac441
commit f5112632a3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 0 deletions

View file

@ -699,6 +699,13 @@ bool NativeWindowViews::IsFullscreen() const {
}
void NativeWindowViews::SetBounds(const gfx::Rect& bounds, bool animate) {
#if BUILDFLAG(IS_WIN)
if (is_moving_ || is_resizing_) {
pending_bounds_change_ = bounds;
return;
}
#endif
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX)
// On Linux and Windows the minimum and maximum size should be updated with
// window size when window is not resizable.

View file

@ -303,6 +303,8 @@ class NativeWindowViews : public NativeWindow,
// Whether the window is currently being moved.
bool is_moving_ = false;
absl::optional<gfx::Rect> pending_bounds_change_;
// The color to use as the theme and symbol colors respectively for Window
// Controls Overlay if enabled on Windows.
SkColor overlay_button_color_;

View file

@ -314,6 +314,15 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
NotifyWindowMoved();
is_moving_ = false;
}
// If the user dragged or moved the window during one or more
// calls to window.setBounds(), we want to apply the most recent
// one once they are done with the move or resize operation.
if (pending_bounds_change_.has_value()) {
SetBounds(pending_bounds_change_.value(), false /* animate */);
pending_bounds_change_.reset();
}
return false;
}
case WM_MOVING: {