feat: enable window controls overlay on macOS (#29253)
* feat: enable windows control overlay on macOS * address review feedback * chore: address review feedback * Address review feedback * update doc per review * only enable WCO when titleBarStyle is overlay * Revert "only enable WCO when titleBarStyle is overlay" This reverts commit 1b58b5b1fcb8f091880a4e5d1f8855399c44afad. * Add new titleBarOverlay property to manage feature * spelling fix * Update docs/api/frameless-window.md Co-authored-by: Samuel Attard <sam@electronjs.org> * Update shell/browser/api/electron_api_browser_window.cc Co-authored-by: Samuel Attard <sam@electronjs.org> * update per review feedback Co-authored-by: Samuel Attard <sam@electronjs.org>
This commit is contained in:
parent
0fe2836151
commit
1f8a46c9c6
16 changed files with 223 additions and 0 deletions
|
@ -1876,7 +1876,36 @@ describe('BrowserWindow module', () => {
|
|||
});
|
||||
|
||||
ifdescribe(process.platform === 'darwin' && parseInt(os.release().split('.')[0]) >= 14)('"titleBarStyle" option', () => {
|
||||
const testWindowsOverlay = async (style: any) => {
|
||||
const w = new BrowserWindow({
|
||||
show: false,
|
||||
width: 400,
|
||||
height: 400,
|
||||
titleBarStyle: style,
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
contextIsolation: false
|
||||
},
|
||||
titleBarOverlay: true
|
||||
});
|
||||
const overlayHTML = path.join(__dirname, 'fixtures', 'pages', 'overlay.html');
|
||||
await w.loadFile(overlayHTML);
|
||||
const overlayEnabled = await w.webContents.executeJavaScript('navigator.windowControlsOverlay.visible');
|
||||
expect(overlayEnabled).to.be.true('overlayEnabled');
|
||||
const overlayRect = await w.webContents.executeJavaScript('getJSOverlayProperties()');
|
||||
expect(overlayRect.y).to.equal(0);
|
||||
expect(overlayRect.x).to.be.greaterThan(0);
|
||||
expect(overlayRect.width).to.be.greaterThan(0);
|
||||
expect(overlayRect.height).to.be.greaterThan(0);
|
||||
const cssOverlayRect = await w.webContents.executeJavaScript('getCssOverlayProperties();');
|
||||
expect(cssOverlayRect).to.deep.equal(overlayRect);
|
||||
const geometryChange = emittedOnce(ipcMain, 'geometrychange');
|
||||
w.setBounds({ width: 800 });
|
||||
const [, newOverlayRect] = await geometryChange;
|
||||
expect(newOverlayRect.width).to.equal(overlayRect.width + 400);
|
||||
};
|
||||
afterEach(closeAllWindows);
|
||||
afterEach(() => { ipcMain.removeAllListeners('geometrychange'); });
|
||||
it('creates browser window with hidden title bar', () => {
|
||||
const w = new BrowserWindow({
|
||||
show: false,
|
||||
|
@ -1897,6 +1926,12 @@ describe('BrowserWindow module', () => {
|
|||
const contentSize = w.getContentSize();
|
||||
expect(contentSize).to.deep.equal([400, 400]);
|
||||
});
|
||||
it('sets Window Control Overlay with hidden title bar', async () => {
|
||||
await testWindowsOverlay('hidden');
|
||||
});
|
||||
it('sets Window Control Overlay with hidden inset title bar', async () => {
|
||||
await testWindowsOverlay('hiddenInset');
|
||||
});
|
||||
});
|
||||
|
||||
ifdescribe(process.platform === 'darwin')('"enableLargerThanScreen" option', () => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue