Browse Source

fix: `win.isMaximized()` for transparent windows on Windows (#38234)

Shelley Vohr 1 year ago
parent
commit
ad07712561
2 changed files with 19 additions and 1 deletions
  1. 1 1
      shell/browser/native_window_views.cc
  2. 18 0
      spec/api-browser-window-spec.ts

+ 1 - 1
shell/browser/native_window_views.cc

@@ -656,7 +656,7 @@ bool NativeWindowViews::IsMaximized() {
     return true;
   } else {
 #if BUILDFLAG(IS_WIN)
-    if (transparent()) {
+    if (transparent() && !IsMinimized()) {
       // Compare the size of the window with the size of the display
       auto display = display::Screen::GetScreen()->GetDisplayNearestWindow(
           GetNativeWindow());

+ 18 - 0
spec/api-browser-window-spec.ts

@@ -6059,6 +6059,24 @@ describe('BrowserWindow module', () => {
   describe('"transparent" option', () => {
     afterEach(closeAllWindows);
 
+    ifit(process.platform !== 'linux')('correctly returns isMaximized() when the window is maximized then minimized', async () => {
+      const w = new BrowserWindow({
+        frame: false,
+        transparent: true
+      });
+
+      const maximize = once(w, 'maximize');
+      w.maximize();
+      await maximize;
+
+      const minimize = once(w, 'minimize');
+      w.minimize();
+      await minimize;
+
+      expect(w.isMaximized()).to.be.false();
+      expect(w.isMinimized()).to.be.true();
+    });
+
     // 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();