test: follow system theme for gnome #35

This commit is contained in:
Tea 2022-04-10 15:05:19 +08:00
parent 42c222b34d
commit 7c24ba198f

View File

@ -16,13 +16,22 @@ class CheckDark {
break; break;
case "gnome": case "gnome":
case "gnome-classic": case "gnome-classic":
monitor = spawn("gsettings", [ const gnomeVersion = execSync(`gnome-shell --version`).toString().replace(/[\r\n]/g, "").split(" ")
"monitor", const gnomeVersionNum = gnomeVersion.length ? Number(gnomeVersion[2]) : 0
"org.gnome.desktop.interface", if (gnomeVersionNum >= 42) {
"gtk-theme", monitor = spawn("gsettings", [
]); "monitor",
"org.gnome.desktop.interface",
"color-scheme",
]);
} else {
monitor = spawn("gsettings", [
"monitor",
"org.gnome.desktop.interface",
"gtk-theme",
]);
}
break; break;
default: default:
console.warn( console.warn(
`NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}` `NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}`
@ -37,7 +46,7 @@ class CheckDark {
monitor.stdout.on("data", (chunk) => { monitor.stdout.on("data", (chunk) => {
// TODO: 防抖动包装 // TODO: 防抖动包装
const data = chunk.toString(); const data = chunk.toString();
const t = data.includes("dark"); const t = data.includes("dark") || data.includes("Dark");
console.log(data); console.log(data);
console.log("dark", t); console.log("dark", t);
// (this._theme = t ? i.Dark : i.Light), // (this._theme = t ? i.Dark : i.Light),
@ -56,15 +65,24 @@ class CheckDark {
break; break;
case "gnome": case "gnome":
case "gnome-classic": case "gnome-classic":
theme = execSync( // 判断 Gnome-Shell 版本
`gsettings get org.gnome.desktop.interface gtk-theme` const gnomeVersion = execSync(`gnome-shell --version`).toString().replace(/[\r\n]/g, "").split(" ")
); const gnomeVersionNum = gnomeVersion.length ? Number(gnomeVersion[2]) : 0
if (gnomeVersionNum >= 42) {
theme = execSync(
`gsettings get org.gnome.desktop.interface color-scheme`
);
} else {
theme = execSync(
`gsettings get org.gnome.desktop.interface gtk-theme`
);
}
break; break;
default: default:
break; break;
} }
return theme.includes("dark"); return theme.includes("dark") || theme.includes("Dark");
} }
} }
const cd = new CheckDark(); const cd = new CheckDark();
@ -128,7 +146,7 @@ function original() {
"gtk-theme", "gtk-theme",
]); ]);
break; break;
default: default:
console.warn( console.warn(
`NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}` `NOT SUPPORTED !!! DESKTOP_SESSION: ${DESKTOP_SESSION}`
@ -147,7 +165,7 @@ function original() {
console.warn(data); console.warn(data);
console.warn("dark", t); console.warn("dark", t);
(this._theme = t ? i.Dark : i.Light), (this._theme = t ? i.Dark : i.Light),
this._onDidThemeChange.fire(this._theme); this._onDidThemeChange.fire(this._theme);
}, 400)); }, 400));
} }
registerListeners() { registerListeners() {
@ -156,7 +174,7 @@ function original() {
(null === (e = this.mediaQuery) || (null === (e = this.mediaQuery) ||
void 0 === e || void 0 === e ||
e.addEventListener("change", this.onMediaQueryChange), e.addEventListener("change", this.onMediaQueryChange),
null === (t = this.mediaQuery2) || null === (t = this.mediaQuery2) ||
void 0 === t || void 0 === t ||
t.addEventListener("change", this.onMediaQueryChange)); t.addEventListener("change", this.onMediaQueryChange));
} }
@ -193,21 +211,21 @@ function original() {
get mediaQuery() { get mediaQuery() {
return ( return (
this._mediaQuery || this._mediaQuery ||
(this._mediaQuery = window.matchMedia( (this._mediaQuery = window.matchMedia(
"(prefers-color-scheme: dark)" "(prefers-color-scheme: dark)"
)), )),
this._mediaQuery this._mediaQuery
); );
} }
get mediaQuery2() { get mediaQuery2() {
return ( return (
void 0 === this._mediaQuery2 && void 0 === this._mediaQuery2 &&
(global.contentWindow && global.contentWindow !== window (global.contentWindow && global.contentWindow !== window
? (this._mediaQuery2 = ? (this._mediaQuery2 =
global.contentWindow.matchMedia( global.contentWindow.matchMedia(
"(prefers-color-scheme: dark)" "(prefers-color-scheme: dark)"
)) ))
: (this._mediaQuery2 = null)), : (this._mediaQuery2 = null)),
this._mediaQuery2 this._mediaQuery2
); );
} }
@ -227,7 +245,7 @@ function original() {
`gsettings get org.gnome.desktop.interface gtk-theme` `gsettings get org.gnome.desktop.interface gtk-theme`
); );
break; break;
default: default:
break; break;
} }