diff --git a/ui/desktop/electron-app/src/index.js b/ui/desktop/electron-app/src/index.js index d811bcf9e..5b95e658f 100644 --- a/ui/desktop/electron-app/src/index.js +++ b/ui/desktop/electron-app/src/index.js @@ -4,12 +4,14 @@ const { default: installExtension, EMBER_INSPECTOR, } = require('electron-devtools-installer'); -const { session, app, protocol, BrowserWindow, ipcMain } = require('electron'); +const { session, app, protocol, BrowserWindow, ipcMain, Menu } = require('electron'); require('./handlers.js'); const origin = require('./origin.js'); const { generateCSPHeader } = require('./content-security-policy.js'); +const menu = require('./menu.js'); + const isDev = require('electron-is-dev'); // Register the custom file protocol @@ -88,6 +90,12 @@ app.on('ready', async () => { } } + // Configure menu in prod env + if(!isDev) { + const menuTemplate = Menu.buildFromTemplate(menu.generateMenuTemplate()); + Menu.setApplicationMenu(menuTemplate); + } + mainWindow = new BrowserWindow({ width: 1024, height: 768, diff --git a/ui/desktop/electron-app/src/menu.js b/ui/desktop/electron-app/src/menu.js new file mode 100644 index 000000000..8e37595bc --- /dev/null +++ b/ui/desktop/electron-app/src/menu.js @@ -0,0 +1,89 @@ +const { shell } = require('electron') + +const generateMenuTemplate = () => { + return [ + // { role: 'appMenu' } + { + label: 'Boundary Desktop', + submenu: [ + { role: 'about' }, + { type: 'separator' }, + { role: 'services' }, + { type: 'separator' }, + { role: 'hide' }, + { role: 'hideothers' }, + { role: 'unhide' }, + { type: 'separator' }, + { role: 'quit' } + ] + }, + // { role: 'fileMenu' } + { + label: 'File', + submenu: [ + { role: 'close' } + ] + }, + // { role: 'editMenu' } + { + label: 'Edit', + submenu: [ + { role: 'undo' }, + { role: 'redo' }, + { type: 'separator' }, + { role: 'cut' }, + { role: 'copy' }, + { role: 'paste' }, + { role: 'pasteAndMatchStyle' }, + { role: 'delete' }, + { role: 'selectAll' }, + { type: 'separator' }, + { + label: 'Speech', + submenu: [ + { role: 'startSpeaking' }, + { role: 'stopSpeaking' } + ] + } + ] + }, + // { role: 'viewMenu' } + { + label: 'View', + submenu: [ + { role: 'reload' }, + { type: 'separator' }, + { role: 'resetZoom' }, + { role: 'zoomIn' }, + { role: 'zoomOut' }, + { type: 'separator' }, + { role: 'togglefullscreen' } + ] + }, + // { role: 'windowMenu' } + { + label: 'Window', + submenu: [ + { role: 'minimize' }, + { role: 'zoom' }, + { type: 'separator' }, + { role: 'front' }, + { type: 'separator' }, + { role: 'window' } + ] + }, + { + role: 'help', + submenu: [ + { + label: 'Documentation', + click: () => shell.openExternal('https://www.boundaryproject.io') + } + ] + } + ] +} + +module.exports = { + generateMenuTemplate: generateMenuTemplate +}; \ No newline at end of file