fix: linux app theme (#4997)

This commit is contained in:
Sline
2025-10-09 16:03:28 +08:00
committed by GitHub
parent bd9db1b4f7
commit e3cd16189b
2 changed files with 46 additions and 0 deletions

View File

@@ -44,6 +44,7 @@
- 修复 Windows 深色模式下首次启动客户端标题栏颜色异常
- 修复静默启动不加载完整 WebView 的问题
- 修复 Linux WebKit 网络进程的崩溃
- 修复 Linux GNOME/KDE 桌面下应用主题颜色选择“系统”后不随操作系统主题Dark/Light切换
## v2.4.2

View File

@@ -53,6 +53,13 @@ export const useCustomTheme = () => {
return;
}
if (
typeof window !== "undefined" &&
typeof window.matchMedia === "function"
) {
return;
}
let isMounted = true;
const timerId = setTimeout(() => {
@@ -90,6 +97,44 @@ 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;
legacyQuery.addListener?.(handleChange);
return () => legacyQuery.removeListener?.(handleChange);
}, [theme_mode, setMode]);
useEffect(() => {
if (theme_mode === undefined) {
return;