diff --git a/ivette/src/dome/main/dome.ts b/ivette/src/dome/main/dome.ts index fb3f50674bf0a988db0808c1ac279ca9d0d2e4fc..c44f553978660151a1295defd5da88310dd9e8bf 100644 --- a/ivette/src/dome/main/dome.ts +++ b/ivette/src/dome/main/dome.ts @@ -167,6 +167,7 @@ function obtainGlobalSettings() { type Store = { [key: string]: unknown }; interface Handle { + primary: boolean; // Primary window window: BrowserWindow; // Also prevents Gc frame: Electron.Rectangle; // Window frame devtools: boolean; // Developper tools visible @@ -348,6 +349,7 @@ function lookupConfig(pwd = '.') { // -------------------------------------------------------------------------- function createBrowserWindow( + primary: boolean, config: BrowserWindowConstructorOptions, argv?: string[], wdir?: string, @@ -387,6 +389,7 @@ function createBrowserWindow( const wid = webContents.id; const handle: Handle = { + primary, window: theWindow, config: configFile, reloaded: false, @@ -487,7 +490,7 @@ function createPrimaryWindow() { applyThemeSettings(globals); // Create Window - createBrowserWindow({ title: appName }, argv, wdir); + createBrowserWindow(true, { title: appName }, argv, wdir); } let appCount = 1; @@ -503,13 +506,15 @@ function createSecondaryWindow( argString = argString.substring(argStart.length); const electronArgv = JSON.parse(argString); const argv = stripElectronArgv(electronArgv); - createBrowserWindow({ title: `${appName} #${++appCount}` }, argv, wdir); + const title = `${appName} #${++appCount}`; + createBrowserWindow(false, { title }, argv, wdir); } } function createDesktopWindow() { const wdir = app.getPath('home'); - createBrowserWindow({ title: `${appName} #${++appCount}` }, [], wdir); + const title = `${appName} #${++appCount}`; + createBrowserWindow(false, { title }, [], wdir); } // -------------------------------------------------------------------------- @@ -541,7 +546,8 @@ let PreferenceWindow: BrowserWindow | undefined; function showSettingsWindow() { if (!PreferenceWindow) - PreferenceWindow = createBrowserWindow({ + PreferenceWindow = createBrowserWindow( + false, { title: `${appName} Settings`, width: 256, height: 248, @@ -645,9 +651,21 @@ export function setMenuItem(spec: Menubar.CustomMenuItem) { Menubar.setMenuItem(spec); } -ipcMain.on('dome.ipc.menu.addmenu', (_evt, label) => addMenu(label)); -ipcMain.on('dome.ipc.menu.addmenuitem', (_evt, spec) => addMenuItem(spec)); -ipcMain.on('dome.ipc.menu.setmenuitem', (_evt, spec) => setMenuItem(spec)); +function isPrimary(evt: IpcMainEvent): boolean { + const h = WindowHandles.get(evt.sender.id); + return h ? h.primary : false; +} + +ipcMain.on('dome.ipc.menu.addmenu', (evt, label) => + isPrimary(evt) && Menubar.addMenu(label) +); +ipcMain.on('dome.ipc.menu.addmenuitem', (evt, spec) => + isPrimary(evt) && Menubar.addMenuItem(spec) +); +ipcMain.on('dome.ipc.menu.setmenuitem', (_evt, spec) => + // Always update menu items + Menubar.setMenuItem(spec) +); // -------------------------------------------------------------------------- // --- Dialogs Management