[FIX] electron: remove Electron's default English application menu
Without a menu set by the application, Electron installs its own: in English, while the interface is French, and offering Reload and the developer tools to the operator. The shell now sets a null menu before its first window, which also removes the menu bar on Windows. Checked: the shell test fails without the call and passes with it; the rebuilt exe, run under Wine 11, shows the version banner and no menu bar. --- FR --- [FIX] electron : retirer le menu anglais par défaut d'Electron Sans menu posé par l'application, Electron installe le sien : en anglais, alors que l'interface est en français, et offrant à l'opérateur le rechargement et les outils de développement. La coquille pose désormais un menu nul avant sa première fenêtre, ce qui retire aussi la barre de menu sous Windows. Vérifié : l'épreuve de la coquille échoue sans l'appel et passe avec ; l'exécutable reconstruit, lancé sous Wine 11, montre le bandeau de version et aucune barre de menu. Assisted-by: Claude Opus 5.5
This commit is contained in:
parent
a3354e2b0b
commit
100c0d3399
3 changed files with 27 additions and 2 deletions
|
|
@ -10,7 +10,7 @@
|
||||||
// processus principal que par les canaux que ce module traite. Un nom importé
|
// 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
|
// interprété comme du balisage reste ainsi une faute d'affichage, et non un
|
||||||
// accès au disque.
|
// accès au disque.
|
||||||
import { app, BrowserWindow, ipcMain } from 'electron';
|
import { app, BrowserWindow, ipcMain, Menu } from 'electron';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
|
|
||||||
// Chemins relatifs à ce module : ils valent dans le dépôt comme dans
|
// Chemins relatifs à ce module : ils valent dans le dépôt comme dans
|
||||||
|
|
@ -45,4 +45,12 @@ function creerFenetre() {
|
||||||
fenetre.loadFile(PAGE);
|
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();
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,14 @@ describe('coquille : processus principal', () => {
|
||||||
assert.ok(existsSync(webPreferences.preload), `${webPreferences.preload} absent`);
|
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/', () => {
|
test('la fenêtre charge la page que Vite construit dans www/', () => {
|
||||||
assert.deepEqual(journalDeLaCoquille().chargements, [
|
assert.deepEqual(journalDeLaCoquille().chargements, [
|
||||||
{ loadFile: join(RACINE, 'www', 'index.html') },
|
{ loadFile: join(RACINE, 'www', 'index.html') },
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,8 @@ const journal = {
|
||||||
sequence: [],
|
sequence: [],
|
||||||
// Options de chaque new BrowserWindow.
|
// Options de chaque new BrowserWindow.
|
||||||
fenetres: [],
|
fenetres: [],
|
||||||
|
// Argument de chaque Menu.setApplicationMenu.
|
||||||
|
menus: [],
|
||||||
// { loadFile: chemin } ou { loadURL: adresse }, par appel.
|
// { loadFile: chemin } ou { loadURL: adresse }, par appel.
|
||||||
chargements: [],
|
chargements: [],
|
||||||
// Canal de chaque ipcMain.handle ou ipcMain.on.
|
// 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 = {
|
export const ipcMain = {
|
||||||
handle(canal, gestionnaire) {
|
handle(canal, gestionnaire) {
|
||||||
journal.sequence.push(`ipcMain.handle:${canal}`);
|
journal.sequence.push(`ipcMain.handle:${canal}`);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue