|
1 | 1 | const path = require('path'); |
2 | | -const { BrowserWindow } = require('electron'); |
| 2 | +const { BrowserWindow, Menu, MenuItem } = require('electron'); |
3 | 3 | const { composerUrl } = require('./../window_routing'); |
4 | 4 | const globalManager = require('./../globalManager'); |
5 | 5 | const { EVENTS, callEvent } = require('./events'); |
6 | 6 | const fileUtils = require('../utils/FileUtils'); |
7 | 7 | const { API_TRACKING_EVENT } = require('../utils/const'); |
8 | 8 | const { filterInvalidEmailAddresses } = require('./../utils/EmailUtils'); |
| 9 | +const { isMacOS } = require('./windowUtils'); |
9 | 10 | const logger = require('../logger'); |
10 | | -const spellChecker = require('spellchecker'); |
11 | 11 |
|
12 | 12 | const lang = require('./../lang'); |
13 | 13 | const { windowTitle } = lang.strings.windows.composer; |
@@ -51,7 +51,8 @@ const createComposerWindow = () => { |
51 | 51 | minWidth: composerSize.minWidth, |
52 | 52 | minHeight: composerSize.minHeight, |
53 | 53 | webPreferences: { |
54 | | - nodeIntegration: true |
| 54 | + nodeIntegration: true, |
| 55 | + spellcheck: true |
55 | 56 | } |
56 | 57 | }); |
57 | 58 | globalManager.composerData.set(window.id, {}); |
@@ -85,33 +86,54 @@ const createComposerWindow = () => { |
85 | 86 | } |
86 | 87 | }); |
87 | 88 |
|
88 | | - require('electron-context-menu')({ |
89 | | - window, |
90 | | - showSaveImageAs: false, |
91 | | - showInspectElement: false, |
92 | | - showCopyImageAddress: false, |
93 | | - prepend: (defaultActions, browserWindow) => { |
94 | | - const checker = new spellChecker.Spellchecker(); |
| 89 | + if (!isMacOS) { |
| 90 | + const mySession = window.session || window.webContents.session; |
| 91 | + if (mySession && mySession.setSpellCheckerLanguages) { |
| 92 | + mySession.setSpellCheckerLanguages(['es', 'en', 'fr', 'de', 'ru']); |
| 93 | + logger.info(mySession.availableSpellCheckerLanguages); |
| 94 | + } |
| 95 | + } |
| 96 | + window.webContents.on('context-menu', (event, params) => { |
| 97 | + const { editFlags, mediaType } = params; |
| 98 | + const menu = new Menu(); |
95 | 99 |
|
96 | | - let options = []; |
97 | | - if (defaultActions.misspelledWord) { |
98 | | - options = options.concat( |
99 | | - checker |
100 | | - .getCorrectionsForMisspelling(defaultActions.misspelledWord) |
101 | | - .map(word => { |
102 | | - return { |
103 | | - label: word, |
104 | | - click: () => { |
105 | | - browserWindow.webContents.insertText(word); |
106 | | - } |
107 | | - }; |
108 | | - }) |
109 | | - .slice(0, 5) |
110 | | - ); |
111 | | - } |
112 | | - return options; |
| 100 | + for (const suggestion of params.dictionarySuggestions.slice(0, 5)) { |
| 101 | + menu.append( |
| 102 | + new MenuItem({ |
| 103 | + label: suggestion, |
| 104 | + click: () => window.webContents.replaceMisspelling(suggestion) |
| 105 | + }) |
| 106 | + ); |
113 | 107 | } |
| 108 | + |
| 109 | + if (params.dictionarySuggestions.length > 0) |
| 110 | + menu.append(new MenuItem({ type: 'separator' })); |
| 111 | + |
| 112 | + menu.append( |
| 113 | + new MenuItem({ |
| 114 | + label: 'Cut', |
| 115 | + enabled: editFlags.canCut, |
| 116 | + click: () => window.webContents.cut() |
| 117 | + }) |
| 118 | + ); |
| 119 | + menu.append( |
| 120 | + new MenuItem({ |
| 121 | + label: 'Copy', |
| 122 | + enabled: editFlags.canCopy, |
| 123 | + click: () => window.webContents.copy() |
| 124 | + }) |
| 125 | + ); |
| 126 | + menu.append( |
| 127 | + new MenuItem({ |
| 128 | + label: 'Paste', |
| 129 | + enabled: editFlags.canPaste && mediaType === 'none', |
| 130 | + click: () => window.webContents.paste() |
| 131 | + }) |
| 132 | + ); |
| 133 | + |
| 134 | + menu.popup(); |
114 | 135 | }); |
| 136 | + |
115 | 137 | return window; |
116 | 138 | }; |
117 | 139 |
|
|
0 commit comments