diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index 5bc9d6a29aba7..a9d51a2b29f78 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 67ec78ab5dd4d..83f3c11a8751d 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -3578,22 +3578,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'); }); });