fix: toggle spell-check not working

fix https://github.com/logseq/db-test/issues/823
This commit is contained in:
rcmerci
2026-04-27 23:31:38 +08:00
parent 13967973d9
commit 9e3a592cff
4 changed files with 54 additions and 3 deletions

View File

@@ -22,6 +22,7 @@
[electron.i18n :as i18n]
[electron.keychain :as keychain]
[electron.logger :as logger]
[electron.spell-check :as spell-check]
[electron.plugin :as plugin]
[electron.server :as server]
[electron.shell :as shell]
@@ -289,11 +290,13 @@
(defmethod handle :quitApp []
(.quit app))
(defmethod handle :userAppCfgs [_window [_ k v]]
(defmethod handle :userAppCfgs [window [_ k v]]
(let [config (cfgs/get-config)]
(if-let [k (and k (keyword k))]
(if-not (nil? v)
(do (cfgs/set-item! k v)
(when (= k :spell-check)
(spell-check/apply-window-spellcheck! window (spell-check/session-spellcheck-enabled? v)))
(state/set-state! [:config k] v))
(cfgs/get-item k))
config)))

View File

@@ -0,0 +1,11 @@
(ns electron.spell-check)
(defn session-spellcheck-enabled?
[value]
(not= false value))
(defn apply-window-spellcheck!
[^js win enabled?]
(when-let [^js session (some-> win .-webContents .-session)]
(.setSpellCheckerEnabled session enabled?))
win)

View File

@@ -9,6 +9,7 @@
[electron.context-menu :as context-menu]
[electron.i18n :refer [t]]
[electron.logger :as logger]
[electron.spell-check :as spell-check]
[electron.state :as state]
[electron.utils :refer [mac? win32? linux? dev? open] :as utils]))
@@ -45,7 +46,6 @@
:sandbox false
:webSecurity (not dev?)
:contextIsolation true
:spellcheck ((fnil identity true) (cfgs/get-item :spell-check))
;; Remove OverlayScrollbars and transition `.scrollbar-spacing`
;; to use `scollbar-gutter` after the feature is implemented in browsers.
:enableBlinkFeatures 'OverlayScrollbars'
@@ -56,7 +56,9 @@
linux?
(assoc :icon (node-path/join js/__dirname "icons/logseq.png")))
win (BrowserWindow. (clj->js win-opts))]
win (BrowserWindow. (clj->js win-opts))
spell-check-enabled? (spell-check/session-spellcheck-enabled? (cfgs/get-item :spell-check))]
(spell-check/apply-window-spellcheck! win spell-check-enabled?)
(.onBeforeSendHeaders (.. session -defaultSession -webRequest)
(clj->js {:urls (array "*://*.youtube.com/*")})
(fn [^js details callback]

View File

@@ -0,0 +1,35 @@
(ns electron.spell-check-test
(:require [cljs.test :refer [deftest is testing]]
[electron.spell-check]))
(defn- session-spellcheck-enabled?
[value]
(when-let [f (resolve 'electron.spell-check/session-spellcheck-enabled?)]
(f value)))
(defn- apply-window-spellcheck!
[win enabled?]
(when-let [f (resolve 'electron.spell-check/apply-window-spellcheck!)]
(f win enabled?)))
(deftest session-spellcheck-enabled?-test
(testing "defaults to enabled unless the stored config is explicitly false"
(is (true? (session-spellcheck-enabled? nil)))
(is (true? (session-spellcheck-enabled? true)))
(is (false? (session-spellcheck-enabled? false)))))
(deftest apply-window-spellcheck!-test
(testing "updates the BrowserWindow session spell checker state"
(let [calls (atom [])
session (js-obj "spellCheckerEnabled" true)
web-contents (js-obj "session" session)
win (js-obj "webContents" web-contents)]
(aset session "setSpellCheckerEnabled"
(fn [enabled?]
(swap! calls conj enabled?)
(aset session "spellCheckerEnabled" enabled?)))
(apply-window-spellcheck! win false)
(is (= [false] @calls))
(is (false? (.-spellCheckerEnabled session))))))