diff --git a/shell/browser/native_window_views.cc b/shell/browser/native_window_views.cc index f027c624b2852..0a23687e021a2 100644 --- a/shell/browser/native_window_views.cc +++ b/shell/browser/native_window_views.cc @@ -1582,8 +1582,17 @@ void NativeWindowViews::OnMouseEvent(ui::MouseEvent* event) { } ui::WindowShowState NativeWindowViews::GetRestoredState() { - if (IsMaximized()) + if (IsMaximized()) { +#if defined(OS_WIN) + // Only restore Maximized state when window is NOT transparent style + if (!transparent()) { + return ui::SHOW_STATE_MAXIMIZED; + } +#else return ui::SHOW_STATE_MAXIMIZED; +#endif + } + if (IsFullscreen()) return ui::SHOW_STATE_FULLSCREEN; diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index a85ad8ce4aa05..f300076918a92 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -4676,4 +4676,32 @@ describe('BrowserWindow module', () => { }); }); }); + + describe('"transparent" option', () => { + afterEach(closeAllWindows); + + // Only applicable on Windows where transparent windows can't be maximized. + ifit(process.platform === 'win32')('can show maximized frameless window', async () => { + const display = screen.getPrimaryDisplay(); + + const w = new BrowserWindow({ + ...display.bounds, + frame: false, + transparent: true, + show: true + }); + + w.loadURL('about:blank'); + await emittedOnce(w, 'ready-to-show'); + + expect(w.isMaximized()).to.be.true(); + + // Fails when the transparent HWND is in an invalid maximized state. + expect(w.getBounds()).to.deep.equal(display.workArea); + + const newBounds = { width: 256, height: 256, x: 0, y: 0 }; + w.setBounds(newBounds); + expect(w.getBounds()).to.deep.equal(newBounds); + }); + }); });