diff --git a/src/menu.ts b/src/menu.ts index 4108c0ec..7a6436a1 100644 --- a/src/menu.ts +++ b/src/menu.ts @@ -39,7 +39,7 @@ const pluginEnabledMenu = (plugin: string, label = '', hasSubmenu = false, refre export const refreshMenu = (win: BrowserWindow) => { setApplicationMenu(win); if (inAppMenuActive) { - win.webContents.send('refreshMenu'); + win.webContents.send('refresh-in-app-menu'); } }; diff --git a/src/plugins/in-app-menu/back.ts b/src/plugins/in-app-menu/back.ts index 9f5f3f05..02658704 100644 --- a/src/plugins/in-app-menu/back.ts +++ b/src/plugins/in-app-menu/back.ts @@ -10,9 +10,13 @@ import { injectCSS } from '../utils'; export default (win: BrowserWindow) => { injectCSS(win.webContents, titlebarStyle); + win.on('close', () => { + win.webContents.send('close-all-in-app-menu-panel'); + }); + win.once('ready-to-show', () => { register(win, '`', () => { - win.webContents.send('toggleMenu'); + win.webContents.send('toggle-in-app-menu'); }); }); diff --git a/src/plugins/in-app-menu/front.ts b/src/plugins/in-app-menu/front.ts index 0a863a06..02a72c67 100644 --- a/src/plugins/in-app-menu/front.ts +++ b/src/plugins/in-app-menu/front.ts @@ -21,6 +21,7 @@ export default async () => { const titleBar = document.createElement('title-bar'); const navBar = document.querySelector('#nav-bar-background'); let maximizeButton: HTMLButtonElement; + let panelClosers: (() => void)[] = []; if (isMacOS) titleBar.style.setProperty('--offset-left', '70px'); const logo = document.createElement('img'); @@ -59,7 +60,7 @@ export default async () => { }; logo.onclick = logoClick; - window.ipcRenderer.on('toggleMenu', logoClick); + window.ipcRenderer.on('toggle-in-app-menu', logoClick); if (!isMacOS) titleBar.appendChild(logo); document.body.appendChild(titleBar); @@ -134,13 +135,15 @@ export default async () => { children.forEach((child) => { if (child !== logo) child.remove(); }); + panelClosers = []; const menu = await window.ipcRenderer.invoke('get-menu') as Menu | null; if (!menu) return; menu.items.forEach((menuItem) => { 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); titleBar.appendChild(menu); @@ -154,7 +157,10 @@ export default async () => { 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', () => { if (isNotWindowsOrMacOS && !hideDOMWindowControls && maximizeButton.firstChild) { maximizeButton.removeChild(maximizeButton.firstChild);