diff --git a/electron/main.js b/electron/main.js index f8d7d6b..dd0b6c3 100644 --- a/electron/main.js +++ b/electron/main.js @@ -10,7 +10,7 @@ // processus principal que par les canaux que ce module traite. Un nom importé // interprété comme du balisage reste ainsi une faute d'affichage, et non un // accès au disque. -import { app, BrowserWindow, ipcMain } from 'electron'; +import { app, BrowserWindow, ipcMain, Menu } from 'electron'; import { fileURLToPath } from 'node:url'; // Chemins relatifs à ce module : ils valent dans le dépôt comme dans @@ -45,4 +45,12 @@ function creerFenetre() { fenetre.loadFile(PAGE); } -app.whenReady().then(creerFenetre); +// Sans menu posé par l'application, Electron installe le sien : en anglais, +// alors que l'interface est en français (§ 2), et porteur de « Reload » et +// des outils de développement. null le retire, et retire avec lui la barre +// de menu des fenêtres sous Windows et Linux ; il est posé avant la première +// fenêtre, qui naîtrait sinon avec la barre. +app.whenReady().then(() => { + Menu.setApplicationMenu(null); + creerFenetre(); +}); diff --git a/test/coquille.test.js b/test/coquille.test.js index 14629ae..55965ac 100644 --- a/test/coquille.test.js +++ b/test/coquille.test.js @@ -92,6 +92,14 @@ describe('coquille : processus principal', () => { assert.ok(existsSync(webPreferences.preload), `${webPreferences.preload} absent`); }); + test("aucun menu d'application : le menu par défaut d'Electron, en anglais, est retiré avant la première fenêtre (§ 2)", () => { + const { menus, sequence } = journalDeLaCoquille(); + assert.deepEqual(menus, [null]); + const retrait = sequence.indexOf('Menu.setApplicationMenu'); + const fenetre = sequence.indexOf('new BrowserWindow'); + assert.ok(retrait !== -1 && fenetre !== -1 && retrait < fenetre, `ordre des appels : ${sequence.join(', ')}`); + }); + test('la fenêtre charge la page que Vite construit dans www/', () => { assert.deepEqual(journalDeLaCoquille().chargements, [ { loadFile: join(RACINE, 'www', 'index.html') }, diff --git a/test/electron_factice.js b/test/electron_factice.js index 94dbba9..dcf6d9b 100644 --- a/test/electron_factice.js +++ b/test/electron_factice.js @@ -48,6 +48,8 @@ const journal = { sequence: [], // Options de chaque new BrowserWindow. fenetres: [], + // Argument de chaque Menu.setApplicationMenu. + menus: [], // { loadFile: chemin } ou { loadURL: adresse }, par appel. chargements: [], // Canal de chaque ipcMain.handle ou ipcMain.on. @@ -124,6 +126,13 @@ export class BrowserWindow { } } +export const Menu = { + setApplicationMenu(menu) { + journal.sequence.push('Menu.setApplicationMenu'); + journal.menus.push(menu); + }, +}; + export const ipcMain = { handle(canal, gestionnaire) { journal.sequence.push(`ipcMain.handle:${canal}`);