From b4d322a5057b172abd100a34e218c23331611d09 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Wed, 8 Sep 2021 08:43:05 +0900 Subject: [PATCH] fix: show maximized frameless window (#30863) * fix: show maximized frameless window * test: show maximized transparent window * fix: test using wrong bounds BrowserWindow will be sized to the workArea when the Windows taskbar is visible. Co-authored-by: samuelmaddock --- shell/browser/native_window_views.cc | 11 ++++++++++- spec-main/api-browser-window-spec.ts | 28 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) 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); + }); + }); });