fix(in-app-menu): panel should close with the window when it is closed

- fix #1389
This commit is contained in:
JellyBrick
2023-11-09 10:27:07 +09:00
parent 55ae9eac1e
commit 9f88b37f41
3 changed files with 15 additions and 5 deletions

View File

@ -39,7 +39,7 @@ const pluginEnabledMenu = (plugin: string, label = '', hasSubmenu = false, refre
export const refreshMenu = (win: BrowserWindow) => { export const refreshMenu = (win: BrowserWindow) => {
setApplicationMenu(win); setApplicationMenu(win);
if (inAppMenuActive) { if (inAppMenuActive) {
win.webContents.send('refreshMenu'); win.webContents.send('refresh-in-app-menu');
} }
}; };

View File

@ -10,9 +10,13 @@ import { injectCSS } from '../utils';
export default (win: BrowserWindow) => { export default (win: BrowserWindow) => {
injectCSS(win.webContents, titlebarStyle); injectCSS(win.webContents, titlebarStyle);
win.on('close', () => {
win.webContents.send('close-all-in-app-menu-panel');
});
win.once('ready-to-show', () => { win.once('ready-to-show', () => {
register(win, '`', () => { register(win, '`', () => {
win.webContents.send('toggleMenu'); win.webContents.send('toggle-in-app-menu');
}); });
}); });

View File

@ -21,6 +21,7 @@ export default async () => {
const titleBar = document.createElement('title-bar'); const titleBar = document.createElement('title-bar');
const navBar = document.querySelector<HTMLDivElement>('#nav-bar-background'); const navBar = document.querySelector<HTMLDivElement>('#nav-bar-background');
let maximizeButton: HTMLButtonElement; let maximizeButton: HTMLButtonElement;
let panelClosers: (() => void)[] = [];
if (isMacOS) titleBar.style.setProperty('--offset-left', '70px'); if (isMacOS) titleBar.style.setProperty('--offset-left', '70px');
const logo = document.createElement('img'); const logo = document.createElement('img');
@ -59,7 +60,7 @@ export default async () => {
}; };
logo.onclick = logoClick; logo.onclick = logoClick;
window.ipcRenderer.on('toggleMenu', logoClick); window.ipcRenderer.on('toggle-in-app-menu', logoClick);
if (!isMacOS) titleBar.appendChild(logo); if (!isMacOS) titleBar.appendChild(logo);
document.body.appendChild(titleBar); document.body.appendChild(titleBar);
@ -134,13 +135,15 @@ export default async () => {
children.forEach((child) => { children.forEach((child) => {
if (child !== logo) child.remove(); if (child !== logo) child.remove();
}); });
panelClosers = [];
const menu = await window.ipcRenderer.invoke('get-menu') as Menu | null; const menu = await window.ipcRenderer.invoke('get-menu') as Menu | null;
if (!menu) return; if (!menu) return;
menu.items.forEach((menuItem) => { menu.items.forEach((menuItem) => {
const menu = document.createElement('menu-button'); const menu = document.createElement('menu-button');
createPanel(titleBar, menu, menuItem.submenu?.items ?? []); const [, { close: closer }] = createPanel(titleBar, menu, menuItem.submenu?.items ?? []);
panelClosers.push(closer);
menu.append(menuItem.label); menu.append(menuItem.label);
titleBar.appendChild(menu); titleBar.appendChild(menu);
@ -154,7 +157,10 @@ export default async () => {
document.title = 'Youtube Music'; document.title = 'Youtube Music';
window.ipcRenderer.on('refreshMenu', () => updateMenu()); window.ipcRenderer.on('close-all-in-app-menu-panel', () => {
panelClosers.forEach((closer) => closer());
});
window.ipcRenderer.on('refresh-in-app-menu', () => updateMenu());
window.ipcRenderer.on('window-maximize', () => { window.ipcRenderer.on('window-maximize', () => {
if (isNotWindowsOrMacOS && !hideDOMWindowControls && maximizeButton.firstChild) { if (isNotWindowsOrMacOS && !hideDOMWindowControls && maximizeButton.firstChild) {
maximizeButton.removeChild(maximizeButton.firstChild); maximizeButton.removeChild(maximizeButton.firstChild);