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)', () => {