[Xfce4-commits] [xfce/xfwm4] 01/05: tabwin: modify CSS only once after theme change

noreply at xfce.org noreply at xfce.org
Thu Jun 6 21:20:31 CEST 2019


This is an automated email from the git hooks/post-receive script.

o   l   i   v   i   e   r       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/xfwm4.

commit f488113b40dcbbeb6fd9679f4f7adf1e0c13ec97
Author: Viktor Odintsev <ninetls at xfce.org>
Date:   Wed Feb 28 00:42:17 2018 +0300

    tabwin: modify CSS only once after theme change
---
 src/screen.h   |  4 ++++
 src/settings.c |  7 +++++++
 src/tabwin.c   | 39 ++++++++++++++++++++++++---------------
 3 files changed, 35 insertions(+), 15 deletions(-)

diff --git a/src/screen.h b/src/screen.h
index 8deb289..96d52ee 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -165,6 +165,10 @@ struct _ScreenInfo
     /* show desktop flag */
     gboolean show_desktop;
 
+    /* tabwin css provider */
+    gboolean tabwin_provider_ready;
+    GtkCssProvider *tabwin_provider;
+
 #ifdef ENABLE_KDE_SYSTRAY_PROXY
     /* There can be one systray per screen */
     Atom net_system_tray_selection;
diff --git a/src/settings.c b/src/settings.c
index 8929be0..46ed185 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -934,6 +934,13 @@ unloadTheme (ScreenInfo *screen_info)
         XFreeGC (myScreenGetXDisplay (screen_info), screen_info->box_gc);
         screen_info->box_gc = None;
     }
+
+    screen_info->tabwin_provider_ready = FALSE;
+    if (screen_info->tabwin_provider != NULL)
+    {
+        g_object_unref (screen_info->tabwin_provider);
+        screen_info->tabwin_provider = NULL;
+    }
 }
 
 
diff --git a/src/tabwin.c b/src/tabwin.c
index a66d7f7..3b76940 100644
--- a/src/tabwin.c
+++ b/src/tabwin.c
@@ -149,33 +149,42 @@ tabwin_draw (GtkWidget *tabwin_widget, cairo_t *cr, gpointer data)
 }
 
 static void
-apply_default_theme (TabwinWidget *tabwin_widget)
+apply_default_theme (TabwinWidget *tabwin_widget, ScreenInfo *screen_info)
 {
     GtkSettings    *settings;
     gchar          *theme;
     GtkCssProvider *provider;
     gchar          *css;
 
-    settings = gtk_settings_get_default ();
+    if (!screen_info->tabwin_provider_ready)
+    {
+        settings = gtk_settings_get_default ();
+
+        g_object_get (settings, "gtk-theme-name", &theme, NULL);
+        g_return_if_fail (theme != NULL);
+
+        provider = gtk_css_provider_get_named (theme, NULL);
+        g_return_if_fail (provider != NULL);
 
-    g_object_get (settings, "gtk-theme-name", &theme, NULL);
-    g_return_if_fail (theme != NULL);
+        css = gtk_css_provider_to_string (provider);
+        if (g_strrstr (css, "#" XFWM_TABWIN_NAME) == NULL)
+        {
+            /* apply default css style */
+            provider = gtk_css_provider_new ();
+            gtk_css_provider_load_from_data (provider, xfwm_tabwin_default_css, -1, NULL);
+            screen_info->tabwin_provider = provider;
+        }
+        g_free (css);
 
-    provider = gtk_css_provider_get_named (theme, NULL);
-    g_return_if_fail (provider != NULL);
+        screen_info->tabwin_provider_ready = TRUE;
+    }
 
-    css = gtk_css_provider_to_string (provider);
-    if (g_strrstr (css, "#" XFWM_TABWIN_NAME) == NULL)
+    if (screen_info->tabwin_provider != NULL)
     {
-        /* apply default css style */
-        provider = gtk_css_provider_new ();
-        gtk_css_provider_load_from_data (provider, xfwm_tabwin_default_css, -1, NULL);
         gtk_style_context_add_provider (gtk_widget_get_style_context (GTK_WIDGET (tabwin_widget)),
-                                        GTK_STYLE_PROVIDER (provider),
+                                        GTK_STYLE_PROVIDER (screen_info->tabwin_provider),
                                         GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-        g_object_unref (provider);
     }
-    g_free (css);
 }
 
 /* Efficiency is definitely *not* the goal here! */
@@ -755,7 +764,7 @@ tabwinCreateWidget (Tabwin *tabwin, ScreenInfo *screen_info, gint monitor_num)
     gtk_window_set_screen (GTK_WINDOW (tabwin_widget), screen_info->gscr);
     gtk_window_set_default_size (GTK_WINDOW (tabwin_widget), 0, 0);
     gtk_widget_set_name (GTK_WIDGET (tabwin_widget), XFWM_TABWIN_NAME);
-    apply_default_theme (tabwin_widget);
+    apply_default_theme (tabwin_widget, screen_info);
 
     /* Check for compositing and set visual for it */
     screen = gtk_widget_get_screen (GTK_WIDGET (tabwin_widget));

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list