fix: WCO maximize button visibility when non-maximizable (#41793)

fix: WCO button visibility when non-maximizable
This commit is contained in:
Shelley Vohr 2024-04-09 13:14:29 +02:00 committed by GitHub
parent 76f7bbb0a8
commit ba3b647fd7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -156,36 +156,26 @@ void WinCaptionButtonContainer::UpdateBackground() {
}
void WinCaptionButtonContainer::UpdateButtons() {
const bool is_maximized = frame_view_->frame()->IsMaximized();
restore_button_->SetVisible(is_maximized);
maximize_button_->SetVisible(!is_maximized);
const bool minimizable = frame_view_->window()->IsMinimizable();
minimize_button_->SetEnabled(minimizable);
minimize_button_->SetVisible(minimizable);
// In touch mode, windows cannot be taken out of fullscreen or tiled mode, so
// the maximize/restore button should be disabled.
const bool is_touch = ui::TouchUiController::Get()->touch_ui();
restore_button_->SetEnabled(!is_touch);
const bool is_maximized = frame_view_->frame()->IsMaximized();
const bool maximizable = frame_view_->window()->IsMaximizable();
restore_button_->SetVisible(is_maximized && maximizable);
maximize_button_->SetVisible(!is_maximized && maximizable);
// In touch mode, windows cannot be taken out of fullscreen or tiled mode, so
// the maximize/restore button should be disabled, unless the window is not
// maximized.
const bool maximizable = frame_view_->window()->IsMaximizable();
maximize_button_->SetEnabled(!(is_touch && is_maximized) && maximizable);
const bool is_touch = ui::TouchUiController::Get()->touch_ui();
restore_button_->SetEnabled(!is_touch);
maximize_button_->SetEnabled(!is_touch || !is_maximized);
// If the window isn't closable, the close button should be disabled.
const bool closable = frame_view_->window()->IsClosable();
close_button_->SetEnabled(closable);
// If all three of closable, maximizable, and minimizable are disabled,
// Windows natively only shows the disabled closable button. Copy that
// behavior here.
if (!maximizable && !closable && !minimizable) {
minimize_button_->SetVisible(false);
maximize_button_->SetVisible(false);
}
InvalidateLayout();
}