From 26a88ffaa366415d668bf98e6cfa8394e28cde31 Mon Sep 17 00:00:00 2001 From: David Sanders Date: Wed, 16 Feb 2022 22:59:57 -0800 Subject: [PATCH] fix: on macOS show BrowserWindow on maximize if not currently shown --- shell/browser/native_window_mac.mm | 12 +++++++++++- spec-main/api-browser-window-spec.ts | 22 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index bf78f78a2631a..b43706091a03b 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -600,13 +600,23 @@ void ViewDidMoveToSuperview(NSView* self, SEL _cmd) { } void NativeWindowMac::Maximize() { - if (IsMaximized()) + const bool is_visible = [window_ isVisible]; + + if (IsMaximized()) { + if (!is_visible) + ShowInactive(); return; + } // Take note of the current window size if (IsNormal()) original_frame_ = [window_ frame]; [window_ zoom:nil]; + + if (!is_visible) { + ShowInactive(); + NotifyWindowMaximize(); + } } void NativeWindowMac::Unmaximize() { diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index 5f3657001ab8c..89a3a54d7a899 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -3509,6 +3509,28 @@ describe('BrowserWindow module', () => { }); }); + // TODO(dsanders11): Enable once maximize event works on Linux again on CI + ifdescribe(process.platform !== 'linux')('BrowserWindow.maximize()', () => { + afterEach(closeAllWindows); + it('should show the window if it is not currently shown', async () => { + const w = new BrowserWindow({ show: false }); + const hidden = emittedOnce(w, 'hide'); + const shown = emittedOnce(w, 'show'); + const maximize = emittedOnce(w, 'maximize'); + expect(w.isVisible()).to.be.false('visible'); + w.maximize(); + await maximize; + expect(w.isVisible()).to.be.true('visible'); + // Even if the window is already maximized + w.hide(); + await hidden; + expect(w.isVisible()).to.be.false('visible'); + w.maximize(); + await shown; + expect(w.isVisible()).to.be.true('visible'); + }); + }); + describe('BrowserWindow.unmaximize()', () => { afterEach(closeAllWindows); it('should restore the previous window position', () => {