From 4ed4328bf8aee48333ea02a44b2cc1efd9b07aa5 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Tue, 8 Mar 2022 15:40:16 -0800 Subject: [PATCH] Toggle spell checker in the session rather than the webPreferences. Signed-off-by: Anders Kaseorg --- app/common/typed-ipc.ts | 2 +- app/main/index.ts | 21 ++++++++++++------- app/renderer/js/components/webview.ts | 8 +------ app/renderer/js/main.ts | 1 - .../js/pages/preference/general-section.ts | 5 +++-- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/app/common/typed-ipc.ts b/app/common/typed-ipc.ts index 1fc8af88..0fa34351 100644 --- a/app/common/typed-ipc.ts +++ b/app/common/typed-ipc.ts @@ -3,6 +3,7 @@ import type {MenuProps, ServerConf} from "./types"; export interface MainMessage { "clear-app-settings": () => void; + "configure-spell-checker": () => void; downloadFile: (url: string, downloadPath: string) => void; "error-reporting": () => void; "fetch-user-agent": () => string; @@ -14,7 +15,6 @@ export interface MainMessage { "realm-name-changed": (serverURL: string, realmName: string) => void; "reload-full-app": () => void; "save-last-tab": (index: number) => void; - "set-spellcheck-langs": () => void; "switch-server-tab": (index: number) => void; "toggle-app": () => void; "toggle-badge-option": (newValue: boolean) => void; diff --git a/app/main/index.ts b/app/main/index.ts index fd96f70f..bf486873 100644 --- a/app/main/index.ts +++ b/app/main/index.ts @@ -174,14 +174,19 @@ function createMainWindow(): Electron.BrowserWindow { const ses = session.fromPartition("persist:webviewsession"); ses.setUserAgent(`ZulipElectron/${app.getVersion()} ${ses.getUserAgent()}`); - ipcMain.on("set-spellcheck-langs", () => { - ses.setSpellCheckerLanguages( - process.platform === "darwin" - ? // Work around https://github.com/electron/electron/issues/30215. - mainWindow.webContents.session.getSpellCheckerLanguages() - : ConfigUtil.getConfigItem("spellcheckerLanguages", null) ?? [], - ); - }); + function configureSpellChecker() { + const enable = ConfigUtil.getConfigItem("enableSpellchecker", true); + if (enable && process.platform !== "darwin") { + ses.setSpellCheckerLanguages( + ConfigUtil.getConfigItem("spellcheckerLanguages", null) ?? [], + ); + } + + ses.setSpellCheckerEnabled(enable); + } + + configureSpellChecker(); + ipcMain.on("configure-spell-checker", configureSpellChecker); AppMenu.setMenu({ tabs: [], diff --git a/app/renderer/js/components/webview.ts b/app/renderer/js/components/webview.ts index cce68d83..a55da064 100644 --- a/app/renderer/js/components/webview.ts +++ b/app/renderer/js/components/webview.ts @@ -71,13 +71,7 @@ export default class WebView { ? html`` : html`preload="${props.preload}"`} partition="persist:webviewsession" - webpreferences=" - contextIsolation, - spellcheck=${Boolean( - ConfigUtil.getConfigItem("enableSpellchecker", true), - )}, - worldSafeExecuteJavaScript=true - " + webpreferences="contextIsolation, worldSafeExecuteJavaScript=true" > `; diff --git a/app/renderer/js/main.ts b/app/renderer/js/main.ts index 44fbb2d7..979688d4 100644 --- a/app/renderer/js/main.ts +++ b/app/renderer/js/main.ts @@ -128,7 +128,6 @@ export class ServerManagerView { await this.initTabs(); this.initActions(); this.registerIpcs(); - ipcRenderer.send("set-spellcheck-langs"); } async loadProxy(): Promise { diff --git a/app/renderer/js/pages/preference/general-section.ts b/app/renderer/js/pages/preference/general-section.ts index 51cd1d82..dcc4dfdd 100644 --- a/app/renderer/js/pages/preference/general-section.ts +++ b/app/renderer/js/pages/preference/general-section.ts @@ -425,6 +425,7 @@ export function initGeneralSection({$root}: GeneralSectionProps): void { clickHandler: () => { const newValue = !ConfigUtil.getConfigItem("enableSpellchecker", true); ConfigUtil.setConfigItem("enableSpellchecker", newValue); + ipcRenderer.send("configure-spell-checker"); enableSpellchecker(); const spellcheckerLanguageInput: HTMLElement = $root.querySelector("#spellcheck-langs")!; @@ -664,7 +665,7 @@ export function initGeneralSection({$root}: GeneralSectionProps): void { tagField.addEventListener("change", () => { if (tagField.value.length === 0) { ConfigUtil.setConfigItem("spellcheckerLanguages", []); - ipcRenderer.send("set-spellcheck-langs"); + ipcRenderer.send("configure-spell-checker"); } else { const data: unknown = JSON.parse(tagField.value); const spellLangs: string[] = z @@ -672,7 +673,7 @@ export function initGeneralSection({$root}: GeneralSectionProps): void { .parse(data) .map((elt) => languagePairs.get(elt.value)!); ConfigUtil.setConfigItem("spellcheckerLanguages", spellLangs); - ipcRenderer.send("set-spellcheck-langs"); + ipcRenderer.send("configure-spell-checker"); } }); }