summaryrefslogtreecommitdiff
path: root/app.tsx
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-03-25 12:12:29 +1100
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-03-25 12:12:29 +1100
commite39900b77ea6d492f72584dd12701004cab847e4 (patch)
tree4ca787241fde8580b658f5733a33eba7d0d3764f /app.tsx
parentschemes: fix updating taking ages (diff)
downloadcaelestia-shell-e39900b77ea6d492f72584dd12701004cab847e4.tar.gz
caelestia-shell-e39900b77ea6d492f72584dd12701004cab847e4.tar.bz2
caelestia-shell-e39900b77ea6d492f72584dd12701004cab847e4.zip
style: ensure loading correct order
Cause async, older requests could load slower and therefore override newer requests Also reduce the number of loads when spam And add light scss var
Diffstat (limited to 'app.tsx')
-rw-r--r--app.tsx36
1 files changed, 29 insertions, 7 deletions
diff --git a/app.tsx b/app.tsx
index ff7601a..c23af96 100644
--- a/app.tsx
+++ b/app.tsx
@@ -26,13 +26,34 @@ const applyTransparency = (name: string, hex: string) => {
const applyVibrancy = (hex: string) => (style.vibrant.get() ? `color.scale(${hex}, $saturation: 40%)` : hex);
-export const loadStyleAsync = async () => {
- const schemeColours = Object.entries(Palette.get_default().colours)
- .map(([name, hex]) => `$${name}: ${applyVibrancy(applyTransparency(name, hex))};`)
- .join("\n");
- await writeFileAsync(`${SRC}/scss/scheme/_index.scss`, `@use "sass:color";\n${schemeColours}`);
- App.apply_css(await execAsync(`sass ${SRC}/style.scss`), true);
-};
+const styleLoader = new (class {
+ #running = false;
+ #dirty = false;
+
+ async run() {
+ this.#dirty = true;
+ if (this.#running) return;
+ this.#running = true;
+ while (this.#dirty) {
+ this.#dirty = false;
+ await this.#run();
+ }
+ this.#running = false;
+ }
+
+ async #run() {
+ const schemeColours = Object.entries(Palette.get_default().colours)
+ .map(([name, hex]) => `$${name}: ${applyVibrancy(applyTransparency(name, hex))};`)
+ .join("\n");
+ await writeFileAsync(
+ `${SRC}/scss/scheme/_index.scss`,
+ `@use "sass:color";\n$light: ${Palette.get_default().mode === "light"};\n${schemeColours}`
+ );
+ App.apply_css(await execAsync(`sass ${SRC}/style.scss`), true);
+ }
+})();
+
+export const loadStyleAsync = () => styleLoader.run();
App.start({
instanceName: "caelestia",
@@ -43,6 +64,7 @@ App.start({
loadStyleAsync().catch(console.error);
style.transparency.subscribe(() => loadStyleAsync().catch(console.error));
Palette.get_default().connect("notify::colours", () => loadStyleAsync().catch(console.error));
+ Palette.get_default().connect("notify::mode", () => loadStyleAsync().catch(console.error));
initConfig();