Browse Source

fix: Allow windows behind macOS elements if frame = false (#24033)

Co-authored-by: Felix Rieseberg <[email protected]>
trop[bot] 4 years ago
parent
commit
acd8829190
2 changed files with 21 additions and 2 deletions
  1. 14 2
      shell/browser/ui/cocoa/electron_ns_window.mm
  2. 7 0
      spec-main/api-browser-window-spec.ts

+ 14 - 2
shell/browser/ui/cocoa/electron_ns_window.mm

@@ -91,8 +91,20 @@ bool ScopedDisableResize::disable_resize_ = false;
 
   NSRect result = [super constrainFrameRect:frameRect toScreen:screen];
   // Enable the window to be larger than screen.
-  if ([self enableLargerThanScreen])
-    result.size = frameRect.size;
+  if ([self enableLargerThanScreen]) {
+    // If we have a frame, ensure that we only position the window
+    // somewhere where the user can move or resize it (and not
+    // behind the menu bar, for instance)
+    //
+    // If there's no frame, put the window wherever the developer
+    // wanted it to go
+    if (shell_->has_frame()) {
+      result.size = frameRect.size;
+    } else {
+      result = frameRect;
+    }
+  }
+
   return result;
 }
 

+ 7 - 0
spec-main/api-browser-window-spec.ts

@@ -1650,6 +1650,13 @@ describe('BrowserWindow module', () => {
       const after = w.getPosition();
       expect(after[1]).to.be.at.least(0);
     });
+    it('can move the window behind menu bar if it has no frame', () => {
+      const w = new BrowserWindow({ show: true, enableLargerThanScreen: true, frame: false });
+      w.setPosition(-10, -10);
+      const after = w.getPosition();
+      expect(after[0]).to.be.equal(-10);
+      expect(after[1]).to.be.equal(-10);
+    });
     it('without it, cannot move the window out of screen', () => {
       const w = new BrowserWindow({ show: true, enableLargerThanScreen: false });
       w.setPosition(-10, -10);