diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index 9ee9cbbb2e591..5aca88b44ebe8 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -1532,12 +1532,15 @@ void ViewDidMoveToSuperview(NSView* self, SEL _cmd) { void NativeWindowMac::SetWindowButtonVisibility(bool visible) { window_button_visibility_ = visible; - // The visibility of window buttons are managed by |buttons_proxy_| if the - // style is customButtonsOnHover. - if (title_bar_style_ == TitleBarStyle::kCustomButtonsOnHover) + if (buttons_proxy_) { + if (visible) + [buttons_proxy_ redraw]; [buttons_proxy_ setVisible:visible]; - else + } + + if (title_bar_style_ != TitleBarStyle::kCustomButtonsOnHover) InternalSetWindowButtonVisibility(visible); + NotifyLayoutWindowControlsOverlay(); } diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index 5f854b927a95b..7889277ab3bf8 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -1998,6 +1998,42 @@ describe('BrowserWindow module', () => { w.setWindowButtonVisibility(false); expect(w._getWindowButtonVisibility()).to.equal(false); }); + + it('correctly updates when entering/exiting fullscreen for hidden style', async () => { + const w = new BrowserWindow({ show: false, frame: false, titleBarStyle: 'hidden' }); + expect(w._getWindowButtonVisibility()).to.equal(true); + w.setWindowButtonVisibility(false); + expect(w._getWindowButtonVisibility()).to.equal(false); + + const enterFS = emittedOnce(w, 'enter-full-screen'); + w.setFullScreen(true); + await enterFS; + + const leaveFS = emittedOnce(w, 'leave-full-screen'); + w.setFullScreen(false); + await leaveFS; + + w.setWindowButtonVisibility(true); + expect(w._getWindowButtonVisibility()).to.equal(true); + }); + + it('correctly updates when entering/exiting fullscreen for hiddenInset style', async () => { + const w = new BrowserWindow({ show: false, frame: false, titleBarStyle: 'hiddenInset' }); + expect(w._getWindowButtonVisibility()).to.equal(true); + w.setWindowButtonVisibility(false); + expect(w._getWindowButtonVisibility()).to.equal(false); + + const enterFS = emittedOnce(w, 'enter-full-screen'); + w.setFullScreen(true); + await enterFS; + + const leaveFS = emittedOnce(w, 'leave-full-screen'); + w.setFullScreen(false); + await leaveFS; + + w.setWindowButtonVisibility(true); + expect(w._getWindowButtonVisibility()).to.equal(true); + }); }); ifdescribe(process.platform === 'darwin')('BrowserWindow.setVibrancy(type)', () => {