Gtk3 port theming

Matthew Brush mbrush at codebrainz.ca
Sun May 15 19:21:50 CEST 2016


On 2016-05-15 05:37 AM, flo.xfce at gmx-topmail.de wrote:
> Hi all,
> in Landrys porting efforts of various panel plugins (and I have seen it
> in other applications, too) I came across code like this:
>
> css = g_strdup_printf("label { color: %s; }", gdk_rgba_to_string(color));
> css_provider = gtk_css_provider_new ();
> gtk_css_provider_load_from_data (css_provider, css, strlen(css), NULL);
>
> This looks really hacky to me, so my question: Is this the recommended
> way of setting widget styles independet of the user's theme? In Xfce
> there are multiple situation where we allow overwriting of the theme,
> for example the panel where you can set custom backgrounds. I'm just
> curious what would be the right way of achieving this.
>

If it didn't need to be dynamic, I'd say to use a separate 
application-specific CSS file.

Another way is to use stuff like `gtk_widget_override_color()` and 
friends (deprecated since 3.16)[0]. The docs for it also tell the 
non-deprecated alternative to use, but I don't know if it's saying to do 
like you showed above, or to write a whole custom GtkStyleProvider 
subclass and such. In any case, you might have more luck deciphering 
those docs than I.

In theory, it should be safe to use `gtk_widget_override_*` functions 
until GTK+ 4, but who knows if the GTK+ devs are going to just make it 
do nothing, breaking the apps in question without technically breaking 
any API/ABI guarantees, like they've done in the past[1].

Cheers,
Matthew Brush

[0]: 
https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-override-color
[1]: https://bugzilla.gnome.org/show_bug.cgi?id=735211


More information about the Xfce4-dev mailing list