| 420 | } |
| 421 | |
| 422 | function convertMenuDefArrToMenu( |
| 423 | webContents: electron.WebContents, |
| 424 | menuDefArr: ElectronContextMenuItem[], |
| 425 | menuState: { hasClick: boolean } |
| 426 | ): electron.Menu { |
| 427 | const menuItems: electron.MenuItem[] = []; |
| 428 | for (const menuDef of menuDefArr) { |
| 429 | const menuItemTemplate: electron.MenuItemConstructorOptions = { |
| 430 | role: menuDef.role as any, |
| 431 | label: menuDef.label, |
| 432 | type: menuDef.type, |
| 433 | click: () => { |
| 434 | menuState.hasClick = true; |
| 435 | webContents.send("contextmenu-click", menuDef.id); |
| 436 | }, |
| 437 | checked: menuDef.checked, |
| 438 | enabled: menuDef.enabled, |
| 439 | }; |
| 440 | if (menuDef.submenu != null) { |
| 441 | menuItemTemplate.submenu = convertMenuDefArrToMenu(webContents, menuDef.submenu, menuState); |
| 442 | } |
| 443 | const menuItem = new electron.MenuItem(menuItemTemplate); |
| 444 | menuItems.push(menuItem); |
| 445 | } |
| 446 | return electron.Menu.buildFromTemplate(menuItems); |
| 447 | } |
| 448 | |
| 449 | electron.ipcMain.on( |
| 450 | "contextmenu-show", |