diff --git a/app/renderer/js/components/context-menu.ts b/app/renderer/js/components/context-menu.ts index 948117b5..4d325ce6 100644 --- a/app/renderer/js/components/context-menu.ts +++ b/app/renderer/js/components/context-menu.ts @@ -22,7 +22,8 @@ export const contextMenu = (webContents: Electron.WebContents, event: Event, pro webContents.session.addWordToSpellCheckerDictionary(props.misspelledWord); } }, { - type: 'separator' + type: 'separator', + visible: props.isEditable && isText && props.misspelledWord.length !== 0 }, { label: `${t.__('Look Up')} "${props.selectionText}"`, visible: process.platform === 'darwin' && isText, @@ -30,7 +31,8 @@ export const contextMenu = (webContents: Electron.WebContents, event: Event, pro webContents.showDefinitionForSelection(); } }, { - type: 'separator' + type: 'separator', + visible: process.platform === 'darwin' && isText }, { label: t.__('Cut'), visible: isText, @@ -80,7 +82,8 @@ export const contextMenu = (webContents: Electron.WebContents, event: Event, pro }); } }, { - type: 'separator' + type: 'separator', + visible: isLink || props.mediaType === 'image' }, { label: t.__('Services'), visible: process.platform === 'darwin', @@ -98,7 +101,13 @@ export const contextMenu = (webContents: Electron.WebContents, event: Event, pro }); } } + // Hide the invisible separators on Linux and Windows + // Electron has a bug which ignores visible: false parameter for separator menuitems. So we remove them here. + // https://github.com/electron/electron/issues/5869 + // https://github.com/electron/electron/issues/6906 - const menu = Menu.buildFromTemplate(menuTemplate); + // eslint-disable-next-line @typescript-eslint/no-unnecessary-boolean-literal-compare + const filteredMenuTemplate = menuTemplate.filter(menuItem => menuItem.visible !== false); + const menu = Menu.buildFromTemplate(filteredMenuTemplate); menu.popup(); };