default-menu.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { shell, Menu } from 'electron';
  2. const v8Util = process.electronBinding('v8_util');
  3. const isMac = process.platform === 'darwin';
  4. export const setDefaultApplicationMenu = () => {
  5. if (v8Util.getHiddenValue<boolean>(global, 'applicationMenuSet')) return;
  6. const helpMenu: Electron.MenuItemConstructorOptions = {
  7. role: 'help',
  8. submenu: [
  9. {
  10. label: 'Learn More',
  11. click: async () => {
  12. await shell.openExternal('https://electronjs.org');
  13. }
  14. },
  15. {
  16. label: 'Documentation',
  17. click: async () => {
  18. const version = process.versions.electron;
  19. await shell.openExternal(`https://github.com/electron/electron/tree/v${version}/docs#readme`);
  20. }
  21. },
  22. {
  23. label: 'Community Discussions',
  24. click: async () => {
  25. await shell.openExternal('https://discuss.atom.io/c/electron');
  26. }
  27. },
  28. {
  29. label: 'Search Issues',
  30. click: async () => {
  31. await shell.openExternal('https://github.com/electron/electron/issues');
  32. }
  33. }
  34. ]
  35. };
  36. const macAppMenu: Electron.MenuItemConstructorOptions = { role: 'appMenu' };
  37. const template: Electron.MenuItemConstructorOptions[] = [
  38. ...(isMac ? [macAppMenu] : []),
  39. { role: 'fileMenu' },
  40. { role: 'editMenu' },
  41. { role: 'viewMenu' },
  42. { role: 'windowMenu' },
  43. helpMenu
  44. ];
  45. const menu = Menu.buildFromTemplate(template);
  46. Menu.setApplicationMenu(menu);
  47. };