From 67b870d8577acb824c1b0c22e9b321ff72bbe61b 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 | 10 ++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index 3220741ec356c..7149a06905b75 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 1ed8734711f33..4300c80218208 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -3529,22 +3529,24 @@ describe('BrowserWindow module', () => { // TODO(dsanders11): Enable once maximize event works on Linux again on CI ifdescribe(process.platform !== 'linux')('BrowserWindow.maximize()', () => { afterEach(closeAllWindows); - // TODO(dsanders11): Disabled on macOS, see https://github.com/electron/electron/issues/32947 - ifit(process.platform !== 'darwin')('should show the window if it is not currently shown', async () => { + 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'); + let shown = emittedOnce(w, 'show'); const maximize = emittedOnce(w, 'maximize'); expect(w.isVisible()).to.be.false('visible'); w.maximize(); await maximize; + await shown; + expect(w.isMaximized()).to.be.true('maximized'); 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'); + shown = emittedOnce(w, 'show'); w.maximize(); - await shown; // Ensure a 'show' event happens when it becomes visible + await shown; expect(w.isVisible()).to.be.true('visible'); }); });