From a67abda72deed36953b0e9684280b6c0e393423b Mon Sep 17 00:00:00 2001 From: Slinetrac Date: Fri, 26 Dec 2025 12:25:51 +0800 Subject: [PATCH] refactor(theme): simplify useCustomTheme for Tauri only --- Changelog.md | 1 + src/components/layout/use-custom-theme.ts | 70 ----------------------- 2 files changed, 1 insertion(+), 70 deletions(-) diff --git a/Changelog.md b/Changelog.md index c0853940e..ad1e120f2 100644 --- a/Changelog.md +++ b/Changelog.md @@ -7,6 +7,7 @@ - 修复设置代理端口时检查端口占用 - 修复 Monaco 编辑器初始化卡 Loading - 修复恢复备份时 `config.yaml` / `profiles.yaml` 文件内字段未正确恢复 +- 修复 Windows 下系统主题同步问题
✨ 新增功能 diff --git a/src/components/layout/use-custom-theme.ts b/src/components/layout/use-custom-theme.ts index d65fbce00..cd7739abd 100644 --- a/src/components/layout/use-custom-theme.ts +++ b/src/components/layout/use-custom-theme.ts @@ -31,9 +31,6 @@ const canUseCssScope = () => { if (cssScopeSupport !== null) { return cssScopeSupport; } - if (typeof document === "undefined") { - return false; - } try { const testStyle = document.createElement("style"); testStyle.textContent = "@scope (:root) { }"; @@ -88,16 +85,6 @@ export const useCustomTheme = () => { return; } - const preferBrowserMatchMedia = - typeof window !== "undefined" && - typeof window.matchMedia === "function" && - // Skip Tauri flow when running purely in browser. - !("__TAURI__" in window); - - if (preferBrowserMatchMedia) { - return; - } - let isMounted = true; const timerId = setTimeout(() => { @@ -135,63 +122,6 @@ export const useCustomTheme = () => { }; }, [theme_mode, appWindow, setMode]); - useEffect(() => { - if (theme_mode !== "system") { - return; - } - - if ( - typeof window === "undefined" || - typeof window.matchMedia !== "function" - ) { - return; - } - - const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)"); - const syncMode = (isDark: boolean) => setMode(isDark ? "dark" : "light"); - const handleChange = (event: MediaQueryListEvent) => - syncMode(event.matches); - - syncMode(mediaQuery.matches); - - if (typeof mediaQuery.addEventListener === "function") { - mediaQuery.addEventListener("change", handleChange); - return () => mediaQuery.removeEventListener("change", handleChange); - } - - type MediaQueryListLegacy = MediaQueryList & { - addListener?: ( - listener: (this: MediaQueryList, event: MediaQueryListEvent) => void, - ) => void; - removeListener?: ( - listener: (this: MediaQueryList, event: MediaQueryListEvent) => void, - ) => void; - }; - - const legacyQuery = mediaQuery as MediaQueryListLegacy; - const legacyAddListener = ( - legacyQuery as { - addListener?: ( - listener: (this: MediaQueryList, event: MediaQueryListEvent) => void, - ) => void; - } - ).addListener; - legacyAddListener?.call(legacyQuery, handleChange); - return () => { - const legacyRemoveListener = ( - legacyQuery as { - removeListener?: ( - listener: ( - this: MediaQueryList, - event: MediaQueryListEvent, - ) => void, - ) => void; - } - ).removeListener; - legacyRemoveListener?.call(legacyQuery, handleChange); - }; - }, [theme_mode, setMode]); - useEffect(() => { if (theme_mode === undefined) { return;