From c8339b125de6ac838a9b1e88c59bd38ddb3fc684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20F=C3=B6rster?= Date: Tue, 1 Aug 2023 21:31:08 +0200 Subject: [PATCH 1/2] use native clipboard on macos On macOS we need the native Edit menu to make all keyboard shortcuts accessable. The shortcuts can copy/cut/paste text and nodes. But using entries from the menu itself only interacts with text. Therefore on macOS a new menu is added: "Nodes" Menu structure: *Nodes | |- Undo |- Redo |-------- |- Cut |- Copy |- Paste |-------- |- Duplicate |- Duplicate with Connections This menus sole purpose is to give the user a menu to interact with Nodes. closes #1590 --- src/main/gui/menu.ts | 204 ++++++++++++++++++++++++++++--------------- 1 file changed, 134 insertions(+), 70 deletions(-) diff --git a/src/main/gui/menu.ts b/src/main/gui/menu.ts index 7696071c79..4ab5e9b2a3 100644 --- a/src/main/gui/menu.ts +++ b/src/main/gui/menu.ts @@ -135,76 +135,140 @@ export const setMainMenu = ({ mainWindow, menuData, enabled = false }: MainMenuA isMac ? { role: 'close', enabled } : { role: 'quit', enabled }, ], }, - { - label: 'Edit', - submenu: [ - { - label: 'Undo', - accelerator: 'CmdOrCtrl+Z', - registerAccelerator: false, - click: () => { - mainWindow.webContents.send('history-undo'); - }, - enabled, - }, - { - label: 'Redo', - accelerator: 'CmdOrCtrl+Y', - registerAccelerator: false, - click: () => { - mainWindow.webContents.send('history-redo'); - }, - enabled, - }, - { type: 'separator' }, - { - label: 'Cut', - accelerator: 'CmdOrCtrl+X', - registerAccelerator: false, - click: () => { - mainWindow.webContents.send('cut'); - }, - enabled, - }, - { - label: 'Copy', - accelerator: 'CmdOrCtrl+C', - registerAccelerator: false, - click: () => { - mainWindow.webContents.send('copy'); - }, - enabled, - }, - { - label: 'Paste', - accelerator: 'CmdOrCtrl+V', - registerAccelerator: false, - click: () => { - mainWindow.webContents.send('paste'); - }, - enabled, - }, - { type: 'separator' }, - { - label: 'Duplicate', - accelerator: 'CmdOrCtrl+D', - registerAccelerator: false, - click: () => { - mainWindow.webContents.send('duplicate'); - }, - enabled, - }, - { - label: 'Duplicate with Connections', - accelerator: 'CmdOrCtrl+Shift+D', - registerAccelerator: false, - click: () => { - mainWindow.webContents.send('duplicate-with-input-edges'); - }, - enabled, - }, - ], - }, + ...(isMac + ? [ + { role: 'editMenu' }, + { + label: 'Nodes', + submenu: [ + { + label: 'Undo', + click: () => { + mainWindow.webContents.send('history-undo'); + }, + enabled, + }, + { + label: 'Redo', + click: () => { + mainWindow.webContents.send('history-redo'); + }, + enabled, + }, + { type: 'separator' }, + { + label: 'Cut', + click: () => { + mainWindow.webContents.send('cut'); + }, + enabled, + }, + { + label: 'Copy', + click: () => { + mainWindow.webContents.send('copy'); + }, + enabled, + }, + { + label: 'Paste', + click: () => { + mainWindow.webContents.send('paste'); + }, + enabled, + }, + { type: 'separator' }, + { + label: 'Duplicate', + accelerator: 'CmdOrCtrl+D', + click: () => { + mainWindow.webContents.send('duplicate'); + }, + enabled, + }, + { + label: 'Duplicate with Connections', + accelerator: 'CmdOrCtrl+Shift+D', + click: () => { + mainWindow.webContents.send('duplicate-with-input-edges'); + }, + enabled, + }, + ], + }, + ] + : [ + { + label: 'Edit', + submenu: [ + { + label: 'Undo', + accelerator: 'CmdOrCtrl+Z', + registerAccelerator: false, + click: () => { + mainWindow.webContents.send('history-undo'); + }, + enabled, + }, + { + label: 'Redo', + accelerator: 'CmdOrCtrl+Y', + registerAccelerator: false, + click: () => { + mainWindow.webContents.send('history-redo'); + }, + enabled, + }, + { type: 'separator' }, + { + label: 'Cut', + accelerator: 'CmdOrCtrl+X', + registerAccelerator: false, + click: () => { + mainWindow.webContents.send('cut'); + }, + enabled, + }, + { + label: 'Copy', + accelerator: 'CmdOrCtrl+C', + registerAccelerator: false, + click: () => { + mainWindow.webContents.send('copy'); + }, + enabled, + }, + { + label: 'Paste', + accelerator: 'CmdOrCtrl+V', + registerAccelerator: false, + click: () => { + mainWindow.webContents.send('paste'); + }, + enabled, + }, + { type: 'separator' }, + { + label: 'Duplicate', + accelerator: 'CmdOrCtrl+D', + registerAccelerator: false, + click: () => { + mainWindow.webContents.send('duplicate'); + }, + enabled, + }, + { + label: 'Duplicate with Connections', + accelerator: 'CmdOrCtrl+Shift+D', + registerAccelerator: false, + click: () => { + mainWindow.webContents.send('duplicate-with-input-edges'); + }, + enabled, + }, + ], + }, + ]), { label: 'View', submenu: [ From 35c08ded5425b4fb9483ebe23c076543694c886a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toni=20F=C3=B6rster?= Date: Wed, 2 Aug 2023 11:31:50 +0200 Subject: [PATCH 2/2] added a Window menu on mac moved View menu The View Menu is now located between Edit and Nodes to align it more with the default menu structure on macOS. Also the Window Menu used on Macs has been added. --- src/main/gui/menu.ts | 47 +++++++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/src/main/gui/menu.ts b/src/main/gui/menu.ts index 4ab5e9b2a3..da1afd9f06 100644 --- a/src/main/gui/menu.ts +++ b/src/main/gui/menu.ts @@ -138,6 +138,22 @@ export const setMainMenu = ({ mainWindow, menuData, enabled = false }: MainMenuA ...(isMac ? [ { role: 'editMenu' }, + { + label: 'View', + submenu: [ + { role: 'reload', enabled }, + { role: 'forceReload', enabled }, + { type: 'separator' }, + { role: 'resetZoom', enabled }, + { role: 'zoomIn', enabled }, + { role: 'zoomOut', enabled }, + { type: 'separator' }, + { role: 'togglefullscreen' }, + ...(!app.isPackaged + ? [{ type: 'separator' }, { role: 'toggleDevTools' }] + : []), + ], + }, { label: 'Nodes', submenu: [ @@ -196,6 +212,7 @@ export const setMainMenu = ({ mainWindow, menuData, enabled = false }: MainMenuA }, ], }, + { role: 'windowMenu' }, ] : [ { @@ -268,21 +285,23 @@ export const setMainMenu = ({ mainWindow, menuData, enabled = false }: MainMenuA }, ], }, + { + label: 'View', + submenu: [ + { role: 'reload', enabled }, + { role: 'forceReload', enabled }, + { type: 'separator' }, + { role: 'resetZoom', enabled }, + { role: 'zoomIn', enabled }, + { role: 'zoomOut', enabled }, + { type: 'separator' }, + { role: 'togglefullscreen' }, + ...(!app.isPackaged + ? [{ type: 'separator' }, { role: 'toggleDevTools' }] + : []), + ], + }, ]), - { - label: 'View', - submenu: [ - { role: 'reload', enabled }, - { role: 'forceReload', enabled }, - { type: 'separator' }, - { role: 'resetZoom', enabled }, - { role: 'zoomIn', enabled }, - { role: 'zoomOut', enabled }, - { type: 'separator' }, - { role: 'togglefullscreen' }, - ...(!app.isPackaged ? [{ type: 'separator' }, { role: 'toggleDevTools' }] : []), - ], - }, { role: 'help', submenu: [