From 34d77ca691c509854a3085e35f7fa49209888218 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Tue, 18 Jan 2022 15:46:50 -0500 Subject: [PATCH] fix: check for maximized window before unmaximizings (#32493) Co-authored-by: David Sanders --- shell/browser/native_window_views.cc | 12 +++++++----- spec-main/api-browser-window-spec.ts | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/shell/browser/native_window_views.cc b/shell/browser/native_window_views.cc index 855c42c9134dd..1fc3cfb034d9b 100644 --- a/shell/browser/native_window_views.cc +++ b/shell/browser/native_window_views.cc @@ -589,14 +589,16 @@ void NativeWindowViews::Maximize() { #endif void NativeWindowViews::Unmaximize() { + if (IsMaximized()) { #if defined(OS_WIN) - if (transparent()) { - SetBounds(restore_bounds_, false); - return; - } + if (transparent()) { + SetBounds(restore_bounds_, false); + return; + } #endif - widget()->Restore(); + widget()->Restore(); + } } bool NativeWindowViews::IsMaximized() { diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index 746788b6cd5ab..d083642002a60 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -3417,6 +3417,29 @@ describe('BrowserWindow module', () => { w.unmaximize(); expectBoundsEqual(w.getPosition(), initialPosition); }); + + // TODO(dsanders11): Enable once minimize event works on Linux again. + // See https://github.com/electron/electron/issues/28699 + ifit(process.platform !== 'linux')('should not restore a minimized window', async () => { + const w = new BrowserWindow(); + const minimize = emittedOnce(w, 'minimize'); + w.minimize(); + await minimize; + w.unmaximize(); + await delay(1000); + expect(w.isMinimized()).to.be.true(); + }); + + it('should not change the size or position of a normal window', async () => { + const w = new BrowserWindow(); + + const initialSize = w.getSize(); + const initialPosition = w.getPosition(); + w.unmaximize(); + await delay(1000); + expectBoundsEqual(w.getSize(), initialSize); + expectBoundsEqual(w.getPosition(), initialPosition); + }); }); describe('setFullScreen(false)', () => {