From e18596a350b6f1b75bfdc8283fde04ff213b5094 Mon Sep 17 00:00:00 2001 From: David Sanders Date: Tue, 29 Mar 2022 16:08:34 -0700 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 | 25 +++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index 97dc4a7e3433e..b419730ec45df 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -602,13 +602,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 d42b346751cbf..98cade45be08c 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -3517,6 +3517,31 @@ 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'); + 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; + expect(w.isVisible()).to.be.true('visible'); + }); + }); + describe('BrowserWindow.unmaximize()', () => { afterEach(closeAllWindows); it('should restore the previous window position', () => {