From 28fb400ad9e3bad7dedd5f9c7deb86de6349bea6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Thu, 28 Apr 2022 13:37:23 +0200
Subject: [PATCH] [dome] only create menu items from primary window

---
 ivette/src/dome/main/dome.ts | 32 +++++++++++++++++++++++++-------
 1 file changed, 25 insertions(+), 7 deletions(-)

diff --git a/ivette/src/dome/main/dome.ts b/ivette/src/dome/main/dome.ts
index fb3f50674bf..c44f5539786 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
-- 
GitLab