default-menu.ts 1.5 KB

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