[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