From 7af6acaf383e69406be26a82aeaaa6c20fb009ac Mon Sep 17 00:00:00 2001 From: SethBurkart123 Date: Fri, 28 Mar 2025 12:17:37 +1100 Subject: [PATCH] fix: themes custom colour not being completely applied --- src/interface/pages/themeCreator.svelte | 6 +-- src/plugins/built-in/themes/theme-manager.ts | 48 ++++++++++++-------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/interface/pages/themeCreator.svelte b/src/interface/pages/themeCreator.svelte index 32b57c28..9b68ca4c 100644 --- a/src/interface/pages/themeCreator.svelte +++ b/src/interface/pages/themeCreator.svelte @@ -75,10 +75,8 @@ })) } - if (tempTheme) { - theme = loadedTheme - themeLoaded = true - } + theme = loadedTheme + themeLoaded = true } else { themeLoaded = true } diff --git a/src/plugins/built-in/themes/theme-manager.ts b/src/plugins/built-in/themes/theme-manager.ts index 94f10e32..052f380f 100644 --- a/src/plugins/built-in/themes/theme-manager.ts +++ b/src/plugins/built-in/themes/theme-manager.ts @@ -145,6 +145,7 @@ export class ThemeManager { // Remove current theme if exists if (this.currentTheme) { console.debug('[ThemeManager] Removing current theme'); + await this.removeTheme(this.currentTheme); } @@ -185,8 +186,12 @@ export class ThemeManager { settingsState.DarkMode = theme.forceDark; } - if (theme.defaultColour) { - console.debug('[ThemeManager] Setting color:', theme.defaultColour); + // Use the stored selected color if available, otherwise use the default + if (theme.selectedColor) { + console.debug('[ThemeManager] Restoring saved color:', theme.selectedColor); + settingsState.selectedColor = theme.selectedColor; + } else if (theme.defaultColour) { + console.debug('[ThemeManager] Using default color:', theme.defaultColour); settingsState.selectedColor = theme.defaultColour; } @@ -220,6 +225,14 @@ export class ThemeManager { }); } + if (this.currentTheme) { + // Store the current color with the theme before removing it + await localforage.setItem(this.currentTheme.id, { + ...this.currentTheme, + selectedColor: settingsState.selectedColor + }); + } + // Restore original settings if (settingsState.originalSelectedColor) { console.debug('[ThemeManager] Restoring original color:', settingsState.originalSelectedColor); @@ -489,14 +502,13 @@ export class ThemeManager { // Update previousImageVariableNames this.previousImageVariableNames = newImageVariableNames; - // Apply theme settings only if this is a new theme - if (!theme.webURL) { - if (forceDark !== undefined) { - settingsState.DarkMode = forceDark; - } - if (defaultColour) { - settingsState.selectedColor = defaultColour; - } + // Apply theme settings + if (forceDark !== undefined) { + settingsState.DarkMode = forceDark; + } + + if (defaultColour) { + settingsState.selectedColor = defaultColour; } } catch (error) { console.error('[ThemeManager] Error previewing theme:', error); @@ -555,14 +567,14 @@ export class ThemeManager { this.previousImageVariableNames = newImageVariableNames; } - // Update theme settings only if this is a new theme - if (!theme.webURL) { - if (theme.forceDark !== undefined) { - settingsState.DarkMode = theme.forceDark; - } - if (theme.defaultColour) { - settingsState.selectedColor = theme.defaultColour; - } + // Always apply dark mode setting + if (theme.forceDark !== undefined) { + settingsState.DarkMode = theme.forceDark; + } + + // Only apply color if this is a new theme + if (!theme.webURL && theme.defaultColour) { + settingsState.selectedColor = theme.defaultColour; } } catch (error) { console.error('[ThemeManager] Error updating theme preview:', error);