import { app, Menu, shell, type MenuItemConstructorOptions } from 'electron'; /** * Menu applicatif. Sur macOS il n'est PAS optionnel : sans lui, aucun raccourci d'édition n'est * enregistré et ⌘C / ⌘V / ⌘A / ⌘Z ne fonctionnent nulle part dans l'app (y compris dans les terminaux * et l'éditeur). Sur Linux/Windows on garde un menu minimal, masqué par défaut (`setMenuBarVisibility` * côté fenêtre) mais qui enregistre quand même les accélérateurs standard. */ export function installAppMenu(opts: { url: string; onQuit: () => void }): void { const isMac = process.platform === 'darwin'; const macAppMenu: MenuItemConstructorOptions[] = isMac ? [ { label: app.name, submenu: [ { role: 'about' }, { type: 'separator' }, { role: 'hide' }, { role: 'hideOthers' }, { role: 'unhide' }, { type: 'separator' }, { label: 'Quit Arboretum', accelerator: 'Command+Q', click: opts.onQuit }, ], }, ] : []; const template: MenuItemConstructorOptions[] = [ ...macAppMenu, { label: 'File', submenu: isMac ? [{ role: 'close' }] : [{ label: 'Quit', accelerator: 'Ctrl+Q', click: opts.onQuit }], }, { label: 'Edit', submenu: [ { role: 'undo' }, { role: 'redo' }, { type: 'separator' }, { role: 'cut' }, { role: 'copy' }, { role: 'paste' }, { role: 'selectAll' }, ], }, { label: 'View', submenu: [ { role: 'reload' }, { role: 'forceReload' }, { type: 'separator' }, { role: 'resetZoom' }, { role: 'zoomIn' }, { role: 'zoomOut' }, { type: 'separator' }, { role: 'togglefullscreen' }, { role: 'toggleDevTools' }, ], }, { label: 'Window', submenu: isMac ? [{ role: 'minimize' }, { role: 'zoom' }, { type: 'separator' }, { role: 'front' }] : [{ role: 'minimize' }], }, { role: 'help', submenu: [ { label: 'Open in browser', click: () => void shell.openExternal(opts.url) }, { label: 'Website', click: () => void shell.openExternal('https://git-arboretum.com') }, ], }, ]; Menu.setApplicationMenu(Menu.buildFromTemplate(template)); app.setAboutPanelOptions({ applicationName: 'Arboretum', applicationVersion: app.getVersion(), copyright: 'Copyright © 2026 Johan Leroy', website: 'https://git-arboretum.com', }); }