diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index 79996152960d8..5c0c97d7802d3 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -518,6 +518,8 @@ void ReorderChildWindowAbove(NSWindow* child_window, NSWindow* other_window) { } void NativeWindowMac::ShowInactive() { + set_wants_to_be_visible(true); + // Reattach the window to the parent to actually show it. if (parent()) InternalSetParentWindow(parent(), true); diff --git a/spec/api-browser-window-spec.ts b/spec/api-browser-window-spec.ts index 5111dc3b83b52..7c5c7f8e50794 100644 --- a/spec/api-browser-window-spec.ts +++ b/spec/api-browser-window-spec.ts @@ -1144,6 +1144,34 @@ describe('BrowserWindow module', () => { await shown; expect(w.isMaximized()).to.equal(true); }); + + ifit(process.platform === 'darwin')('should attach child window to parent', async () => { + const wShow = once(w, 'show'); + w.show(); + await wShow; + + const c = new BrowserWindow({ show: false, parent: w }); + const cShow = once(c, 'show'); + c.showInactive(); + await cShow; + + // verifying by checking that the child tracks the parent's visibility + const minimized = once(w, 'minimize'); + w.minimize(); + await minimized; + + expect(w.isVisible()).to.be.false('parent is visible'); + expect(c.isVisible()).to.be.false('child is visible'); + + const restored = once(w, 'restore'); + w.restore(); + await restored; + + expect(w.isVisible()).to.be.true('parent is visible'); + expect(c.isVisible()).to.be.true('child is visible'); + + closeWindow(c); + }); }); describe('BrowserWindow.focus()', () => {