fix: WCO not working with some window configurations (#45478)

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
trop[bot] 2025-02-05 14:09:46 -05:00 committed by GitHub
parent d857946d6e
commit 3053e33739
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 18 additions and 10 deletions

View file

@ -700,6 +700,15 @@ void NativeWindowViews::Minimize() {
} }
void NativeWindowViews::Restore() { void NativeWindowViews::Restore() {
#if BUILDFLAG(IS_WIN)
if (IsMaximized() && transparent()) {
SetBounds(restore_bounds_, false);
NotifyWindowRestore();
UpdateThickFrame();
return;
}
#endif
widget()->Restore(); widget()->Restore();
#if BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_WIN)

View file

@ -48,27 +48,26 @@ bool HitTestCaptionButton(WinCaptionButton* button, const gfx::Point& point) {
WinCaptionButtonContainer::WinCaptionButtonContainer(WinFrameView* frame_view) WinCaptionButtonContainer::WinCaptionButtonContainer(WinFrameView* frame_view)
: frame_view_(frame_view), : frame_view_(frame_view),
minimize_button_(AddChildView(CreateCaptionButton( minimize_button_(AddChildView(CreateCaptionButton(
base::BindRepeating(&views::Widget::Minimize, base::BindRepeating(&NativeWindow::Minimize,
base::Unretained(frame_view_->frame())), base::Unretained(frame_view_->window())),
frame_view_, frame_view_,
VIEW_ID_MINIMIZE_BUTTON, VIEW_ID_MINIMIZE_BUTTON,
IDS_APP_ACCNAME_MINIMIZE))), IDS_APP_ACCNAME_MINIMIZE))),
maximize_button_(AddChildView(CreateCaptionButton( maximize_button_(AddChildView(CreateCaptionButton(
base::BindRepeating(&views::Widget::Maximize, base::BindRepeating(&NativeWindow::Maximize,
base::Unretained(frame_view_->frame())), base::Unretained(frame_view_->window())),
frame_view_, frame_view_,
VIEW_ID_MAXIMIZE_BUTTON, VIEW_ID_MAXIMIZE_BUTTON,
IDS_APP_ACCNAME_MAXIMIZE))), IDS_APP_ACCNAME_MAXIMIZE))),
restore_button_(AddChildView(CreateCaptionButton( restore_button_(AddChildView(CreateCaptionButton(
base::BindRepeating(&views::Widget::Restore, base::BindRepeating(&NativeWindow::Restore,
base::Unretained(frame_view_->frame())), base::Unretained(frame_view_->window())),
frame_view_, frame_view_,
VIEW_ID_RESTORE_BUTTON, VIEW_ID_RESTORE_BUTTON,
IDS_APP_ACCNAME_RESTORE))), IDS_APP_ACCNAME_RESTORE))),
close_button_(AddChildView(CreateCaptionButton( close_button_(AddChildView(CreateCaptionButton(
base::BindRepeating(&views::Widget::CloseWithReason, base::BindRepeating(&NativeWindow::Close,
base::Unretained(frame_view_->frame()), base::Unretained(frame_view_->window())),
views::Widget::ClosedReason::kCloseButtonClicked),
frame_view_, frame_view_,
VIEW_ID_CLOSE_BUTTON, VIEW_ID_CLOSE_BUTTON,
IDS_APP_ACCNAME_CLOSE))) { IDS_APP_ACCNAME_CLOSE))) {
@ -152,7 +151,7 @@ void WinCaptionButtonContainer::UpdateButtons() {
minimize_button_->SetEnabled(minimizable); minimize_button_->SetEnabled(minimizable);
minimize_button_->SetVisible(minimizable); minimize_button_->SetVisible(minimizable);
const bool is_maximized = frame_view_->frame()->IsMaximized(); const bool is_maximized = frame_view_->window()->IsMaximized();
const bool maximizable = frame_view_->window()->IsMaximizable(); const bool maximizable = frame_view_->window()->IsMaximizable();
restore_button_->SetVisible(is_maximized && maximizable); restore_button_->SetVisible(is_maximized && maximizable);
maximize_button_->SetVisible(!is_maximized && maximizable); maximize_button_->SetVisible(!is_maximized && maximizable);