Skip to content

Fix theme changes only taking effect on the next load - #21620

Open
cyberhirsch wants to merge 1 commit into
darktable-org:masterfrom
cyberhirsch:fix/theme-provider-stacking
Open

Fix theme changes only taking effect on the next load#21620
cyberhirsch wants to merge 1 commit into
darktable-org:masterfrom
cyberhirsch:fix/theme-provider-stacking

Conversation

@cyberhirsch

Copy link
Copy Markdown
Contributor

dt_gui_load_theme() created a new GtkCssProvider on every call and added it to the screen. gtk_style_context_add_provider_for_screen() takes its own reference, so the g_object_unref() at the end never removed it and providers accumulated, all at GTK_STYLE_PROVIDER_PRIORITY_USER + 1. With several providers at the same priority the oldest one still won the @define-color lookups, so selecting a theme appeared to do nothing until the theme was loaded again -- switching to another theme and back was the usual workaround.

Create the provider once and replace its data on subsequent calls.

While here, the theme selector in preferences silently fell back to list index 0 when the configured theme didn't match any entry, so an unknown or empty value was displayed as whichever theme happened to sort first rather than as the actual default. Fall back to the configured default instead, and free the per-entry name string, which the combobox copies.

dt_gui_load_theme() created a new GtkCssProvider on every call and added
it to the screen. gtk_style_context_add_provider_for_screen() takes its
own reference, so the g_object_unref() at the end never removed it and
providers accumulated, all at GTK_STYLE_PROVIDER_PRIORITY_USER + 1. With
several providers at the same priority the oldest one still won the
@define-color lookups, so selecting a theme appeared to do nothing until
the theme was loaded again -- switching to another theme and back was the
usual workaround.

Create the provider once and replace its data on subsequent calls.

While here, the theme selector in preferences silently fell back to list
index 0 when the configured theme didn't match any entry, so an unknown
or empty value was displayed as whichever theme happened to sort first
rather than as the actual default. Fall back to the configured default
instead, and free the per-entry name string, which the combobox copies.
@TurboGit

Copy link
Copy Markdown
Member

With several providers at the same priority the oldest one still won the @define-color lookups, so selecting a theme appeared to do nothing until the theme was loaded again

Can you clarify? And a way to reproduce because I don't see that on my side. TIA.

@TurboGit TurboGit added the scope: UI user interface and interactions label Jul 25, 2026
@TurboGit

TurboGit commented Aug 4, 2026

Copy link
Copy Markdown
Member

@cyberhirsch : Just a gentle ping for my previous question. TIA.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

scope: UI user interface and interactions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants