From 02073d68a6ee72a3b740bd13d80f71083f993c01 Mon Sep 17 00:00:00 2001 From: Eric Koegel Date: Fri, 23 Jun 2017 11:35:57 +0300 Subject: [PATCH] Use custom CSS for the iconview as a fallback (Bug #13609) If the theme doesn't provide custom CSS for the XfdesktopIconView then we'll set a decent default. --- src/xfdesktop-application.c | 58 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/src/xfdesktop-application.c b/src/xfdesktop-application.c index 100cda98..45efca86 100644 --- a/src/xfdesktop-application.c +++ b/src/xfdesktop-application.c @@ -137,7 +137,24 @@ struct _XfdesktopApplicationClass GApplicationClass parent; }; - +const gchar *ToZ_CSS = +"XfdesktopIconView.view {" +" background-color: rgba(0,0,0,0.0);" +" color: white;" +"}" +"XfdesktopIconView.view:active {" +" background-color: rgba(57,142,231,0.75);" +" color: rgba(57,142,231,0.75);" +" border-radius: 5px;" +"}" +"XfdesktopIconView.rubberband {" +" background-color: rgba(0,0,0,0.25);" +"}" +"XfdesktopIconView.view.label," +"XfdesktopIconView.view.label:active {" +" color: white;" +" text-shadow: 1px 2px black;" +"}"; G_DEFINE_TYPE(XfdesktopApplication, xfdesktop_application, G_TYPE_APPLICATION) @@ -622,22 +639,49 @@ xfdesktop_application_startup(GApplication *g_application) } static void -xfdesktop_application_do_theme_stuff (XfdesktopApplication *app) +xfdesktop_application_theme_changed (GtkSettings *settings, + XfdesktopApplication *app) { - GtkSettings *settings; GtkCssProvider *provider = NULL; + static GtkCssProvider *custom_provider = NULL; gchar *theme; + gchar *css; - settings = gtk_settings_get_default(); g_object_get(settings, "gtk-theme-name", &theme, NULL); provider = gtk_css_provider_get_named(theme, NULL); - DBG("css stuff: %s", gtk_css_provider_to_string (provider)); + css = gtk_css_provider_to_string (provider); + + if (g_strrstr (css, "XfdesktopIconView") != NULL) { + DBG("XfdesktopIconView section found in theme %s", theme); + if (custom_provider != NULL) { + gtk_style_context_remove_provider_for_screen (gdk_screen_get_default (), + GTK_STYLE_PROVIDER(custom_provider)); + g_clear_object (&custom_provider); + } + } else { + DBG("XfdesktopIconView section not found in theme %s, setting our fallback", theme); + if (custom_provider != NULL) { + gtk_style_context_remove_provider_for_screen (gdk_screen_get_default (), + GTK_STYLE_PROVIDER(custom_provider)); + g_clear_object (&custom_provider); + } + custom_provider = gtk_css_provider_new(); + gtk_css_provider_load_from_data(custom_provider, + ToZ_CSS, + -1, + NULL); + gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), + GTK_STYLE_PROVIDER(custom_provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } + g_free(css); } static void xfdesktop_application_start(XfdesktopApplication *app) { + GtkSettings *settings; GdkDisplay *gdpy; GError *error = NULL; gchar buf[1024]; @@ -646,7 +690,9 @@ xfdesktop_application_start(XfdesktopApplication *app) g_return_if_fail(app != NULL); - xfdesktop_application_do_theme_stuff (app); + settings = gtk_settings_get_default(); + g_signal_connect (settings, "notify::gtk-theme-name", G_CALLBACK (xfdesktop_application_theme_changed), NULL); + xfdesktop_application_theme_changed (settings, app); /* stop autostart timeout */ if(app->wait_for_wm_timeout_id != 0) -- 2.11.0