feat(theme): respect color_scheme config in theme detection
- commit
- 752d9d64c7e4dff43d88944909ad5636e36f8227
- author
- bnema · · 2025-10-23 20:56 UTC
- parent
- 98b0069
- signature
- unsigned
1 file · +18 -2
M pkg/webkit/user_content.go +18 -2
| @@ -5,6 +5,7 @@ import ( | |||
| 5 | 5 | "log" | |
| 6 | 6 | ||
| 7 | 7 | "github.com/bnema/dumber/assets" | |
| 8 | + | "github.com/bnema/dumber/internal/config" | |
| 8 | 9 | webkit "github.com/diamondburned/gotk4-webkitgtk/pkg/webkit/v6" | |
| 9 | 10 | ) | |
| 10 | 11 | ||
| @@ -39,7 +40,22 @@ func SetupUserContentManager(view *webkit.WebView, appearanceConfigJSON string, | |||
| 39 | 40 | ||
| 40 | 41 | // Inject GTK theme detection SECOND, before color-scheme script | |
| 41 | 42 | // The color-scheme.ts expects window.__dumber_gtk_prefers_dark to be set | |
| 42 | - | prefersDark := PrefersDarkTheme() | |
| 43 | + | // Respect the ColorScheme config setting | |
| 44 | + | cfg := config.Get() | |
| 45 | + | var prefersDark bool | |
| 46 | + | switch cfg.Appearance.ColorScheme { | |
| 47 | + | case "prefer-dark": | |
| 48 | + | prefersDark = true | |
| 49 | + | log.Printf("[webkit] Using config-forced dark theme (color_scheme: prefer-dark)") | |
| 50 | + | case "prefer-light": | |
| 51 | + | prefersDark = false | |
| 52 | + | log.Printf("[webkit] Using config-forced light theme (color_scheme: prefer-light)") | |
| 53 | + | default: | |
| 54 | + | // "default" or empty - follow system GTK preference | |
| 55 | + | prefersDark = PrefersDarkTheme() | |
| 56 | + | log.Printf("[webkit] Using system GTK theme preference (color_scheme: %s)", cfg.Appearance.ColorScheme) | |
| 57 | + | } | |
| 58 | + | ||
| 43 | 59 | gtkThemeScript := fmt.Sprintf(`window.__dumber_gtk_prefers_dark = %t;`, prefersDark) | |
| 44 | 60 | ucm.AddScript(webkit.NewUserScript( | |
| 45 | 61 | gtkThemeScript, | |
| @@ -48,7 +64,7 @@ func SetupUserContentManager(view *webkit.WebView, appearanceConfigJSON string, | |||
| 48 | 64 | nil, | |
| 49 | 65 | nil, | |
| 50 | 66 | )) | |
| 51 | - | log.Printf("[webkit] Injected GTK theme preference: prefersDark=%t", prefersDark) | |
| 67 | + | log.Printf("[webkit] Injected theme preference: prefersDark=%t", prefersDark) | |
| 52 | 68 | ||
| 53 | 69 | // Inject palette config SECOND, before GUI scripts | |
| 54 | 70 | // The GUI expects window.__dumber_palette = { "light": {...}, "dark": {...} } | |
| @@ -5,6 +5,7 @@ import ( | |||||
| 5 | "log" | 5 | "log" | ||
| 6 | 6 | ||||
| 7 | "github.com/bnema/dumber/assets" | 7 | "github.com/bnema/dumber/assets" | ||
| 8 | + | "github.com/bnema/dumber/internal/config" | |||
| 8 | webkit "github.com/diamondburned/gotk4-webkitgtk/pkg/webkit/v6" | 9 | webkit "github.com/diamondburned/gotk4-webkitgtk/pkg/webkit/v6" | ||
| 9 | ) | 10 | ) | ||
| 10 | 11 | ||||
| @@ -39,7 +40,22 @@ func SetupUserContentManager(view *webkit.WebView, appearanceConfigJSON string, | |||||
| 39 | 40 | ||||
| 40 | // Inject GTK theme detection SECOND, before color-scheme script | 41 | // Inject GTK theme detection SECOND, before color-scheme script | ||
| 41 | // The color-scheme.ts expects window.__dumber_gtk_prefers_dark to be set | 42 | // The color-scheme.ts expects window.__dumber_gtk_prefers_dark to be set | ||
| 42 | - | prefersDark := PrefersDarkTheme() | 43 | + | // Respect the ColorScheme config setting |
| 44 | + | cfg := config.Get() | |||
| 45 | + | var prefersDark bool | |||
| 46 | + | switch cfg.Appearance.ColorScheme { | |||
| 47 | + | case "prefer-dark": | |||
| 48 | + | prefersDark = true | |||
| 49 | + | log.Printf("[webkit] Using config-forced dark theme (color_scheme: prefer-dark)") | |||
| 50 | + | case "prefer-light": | |||
| 51 | + | prefersDark = false | |||
| 52 | + | log.Printf("[webkit] Using config-forced light theme (color_scheme: prefer-light)") | |||
| 53 | + | default: | |||
| 54 | + | // "default" or empty - follow system GTK preference | |||
| 55 | + | prefersDark = PrefersDarkTheme() | |||
| 56 | + | log.Printf("[webkit] Using system GTK theme preference (color_scheme: %s)", cfg.Appearance.ColorScheme) | |||
| 57 | + | } | |||
| 58 | + | ||||
| 43 | gtkThemeScript := fmt.Sprintf(`window.__dumber_gtk_prefers_dark = %t;`, prefersDark) | 59 | gtkThemeScript := fmt.Sprintf(`window.__dumber_gtk_prefers_dark = %t;`, prefersDark) | ||
| 44 | ucm.AddScript(webkit.NewUserScript( | 60 | ucm.AddScript(webkit.NewUserScript( | ||
| 45 | gtkThemeScript, | 61 | gtkThemeScript, | ||
| @@ -48,7 +64,7 @@ func SetupUserContentManager(view *webkit.WebView, appearanceConfigJSON string, | |||||
| 48 | nil, | 64 | nil, | ||
| 49 | nil, | 65 | nil, | ||
| 50 | )) | 66 | )) | ||
| 51 | - | log.Printf("[webkit] Injected GTK theme preference: prefersDark=%t", prefersDark) | 67 | + | log.Printf("[webkit] Injected theme preference: prefersDark=%t", prefersDark) |
| 52 | 68 | ||||
| 53 | // Inject palette config SECOND, before GUI scripts | 69 | // Inject palette config SECOND, before GUI scripts | ||
| 54 | // The GUI expects window.__dumber_palette = { "light": {...}, "dark": {...} } | 70 | // The GUI expects window.__dumber_palette = { "light": {...}, "dark": {...} } | ||