From 040e9c317e1ed8f687d0189a9d4ecc0a63aed16d Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 16:54:37 +0100 Subject: [PATCH] fix: WCO buttons hidden on Linux in fullscreen (#44640) 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 0207fb0ddeb6..c30f37e9a06b 100644 --- a/shell/browser/ui/views/opaque_frame_view.cc +++ b/shell/browser/ui/views/opaque_frame_view.cc @@ -255,14 +255,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) @@ -401,8 +404,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 { @@ -411,8 +413,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(); @@ -430,8 +431,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; } }