From b6e16fa18d3f0a59c86be7ee5baa1391434261c0 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:44:51 -0500 Subject: [PATCH] fix: WCO buttons hidden on Linux in fullscreen (#44643) Closes https://github.com/electron/electron/issues/44569. Fixes an issue where the WCO buttons were hidden on Linux in fullscreen mode but not on Windows or macOS. The Windows behavior is the expected one, so this commit makes the Linux behavior consistent. Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr --- shell/browser/ui/views/opaque_frame_view.cc | 31 ++++++++++++--------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/shell/browser/ui/views/opaque_frame_view.cc b/shell/browser/ui/views/opaque_frame_view.cc index c4f89568739..b556e029127 100644 --- a/shell/browser/ui/views/opaque_frame_view.cc +++ b/shell/browser/ui/views/opaque_frame_view.cc @@ -256,14 +256,17 @@ void OpaqueFrameView::LayoutWindowControls() { buttons_not_shown.push_back(views::FrameButton::kMinimize); buttons_not_shown.push_back(views::FrameButton::kClose); - for (const auto& button : leading_buttons_) { - ConfigureButton(button, ALIGN_LEADING); - std::erase(buttons_not_shown, button); - } + // We do not want to show the buttons in fullscreen mode. + if (!frame()->IsFullscreen()) { + for (const auto& button : leading_buttons_) { + ConfigureButton(button, ALIGN_LEADING); + std::erase(buttons_not_shown, button); + } - for (const auto& button : base::Reversed(trailing_buttons_)) { - ConfigureButton(button, ALIGN_TRAILING); - std::erase(buttons_not_shown, button); + for (const auto& button : base::Reversed(trailing_buttons_)) { + ConfigureButton(button, ALIGN_TRAILING); + std::erase(buttons_not_shown, button); + } } for (const auto& button_id : buttons_not_shown) @@ -402,8 +405,7 @@ void OpaqueFrameView::ConfigureButton(views::FrameButton button_id, ButtonAlignment alignment) { switch (button_id) { case views::FrameButton::kMinimize: { - bool can_minimize = true; // delegate_->CanMinimize(); - if (can_minimize) { + if (window()->IsMinimizable()) { minimize_button_->SetVisible(true); SetBoundsForButton(button_id, minimize_button_, alignment); } else { @@ -412,8 +414,7 @@ void OpaqueFrameView::ConfigureButton(views::FrameButton button_id, break; } case views::FrameButton::kMaximize: { - bool can_maximize = true; // delegate_->CanMaximize(); - if (can_maximize) { + if (window()->IsMaximizable()) { // When the window is restored, we show a maximized button; otherwise, // we show a restore button. bool is_restored = !window()->IsMaximized() && !window()->IsMinimized(); @@ -431,8 +432,12 @@ void OpaqueFrameView::ConfigureButton(views::FrameButton button_id, break; } case views::FrameButton::kClose: { - close_button_->SetVisible(true); - SetBoundsForButton(button_id, close_button_, alignment); + if (window()->IsClosable()) { + close_button_->SetVisible(true); + SetBoundsForButton(button_id, close_button_, alignment); + } else { + HideButton(button_id); + } break; } }