From f86486e128f62ed5a531163535d11f0aa0268928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Sun, 5 May 2019 20:45:26 +0200 Subject: [PATCH] Fix memory-leak and reduce cpu-load slightly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * when setting font remove old css provider befor setting new -> fix memory leak * do call cpufreq_label_set_font only on init and when font was changed -> reduce cpu-load Fixes https://bugzilla.xfce.org/show_bug.cgi?id=15218 Upstream-Status: Submitted [1] [1] https://bugzilla.xfce.org/attachment.cgi?id=8492 Signed-off-by: Andreas Müller --- panel-plugin/xfce4-cpufreq-configure.c | 4 ++++ panel-plugin/xfce4-cpufreq-plugin.c | 13 +++++++++++-- panel-plugin/xfce4-cpufreq-plugin.h | 2 ++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/panel-plugin/xfce4-cpufreq-configure.c b/panel-plugin/xfce4-cpufreq-configure.c index 1205fc9..48e72ff 100644 --- a/panel-plugin/xfce4-cpufreq-configure.c +++ b/panel-plugin/xfce4-cpufreq-configure.c @@ -85,7 +85,10 @@ button_fontname_update(GtkWidget *button, gboolean update_plugin) } if (update_plugin) + { + cpufreq_label_set_font (); cpufreq_update_plugin (TRUE); + } } @@ -155,6 +158,7 @@ button_fontcolor_clicked (GtkWidget *button, void *data) gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (button), color); cpuFreq->options->fontcolor = gdk_rgba_to_string (color); g_free (color); + cpufreq_label_set_font (); cpufreq_update_plugin (TRUE); } diff --git a/panel-plugin/xfce4-cpufreq-plugin.c b/panel-plugin/xfce4-cpufreq-plugin.c index e886121..8d7c9e5 100644 --- a/panel-plugin/xfce4-cpufreq-plugin.c +++ b/panel-plugin/xfce4-cpufreq-plugin.c @@ -44,6 +44,7 @@ cpufreq_label_set_font (void) { gchar *css = NULL, *css_font = NULL, *css_color = NULL; GtkCssProvider *provider; + GtkStyleContext *context; PangoFontDescription *font; if (G_UNLIKELY (cpuFreq->label == NULL)) @@ -76,11 +77,17 @@ cpufreq_label_set_font (void) if (css) { provider = gtk_css_provider_new (); + context = GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (cpuFreq->label))); + + if (currentProvider) + gtk_style_context_remove_provider (context, currentProvider); gtk_css_provider_load_from_data (provider, css, -1, NULL); gtk_style_context_add_provider ( - GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (cpuFreq->label))), + context, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + + currentProvider = provider; } g_free (css); @@ -420,7 +427,6 @@ cpufreq_update_plugin (gboolean reset_label_size) if (cpuFreq->layout_changed) { - cpufreq_label_set_font (); cpufreq_widgets_layout (); } @@ -601,6 +607,7 @@ cpufreq_widgets (void) gtk_widget_show_all (cpuFreq->button); + cpufreq_label_set_font (); cpufreq_update_plugin (TRUE); } @@ -775,6 +782,8 @@ cpufreq_construct (XfcePanelPlugin *plugin) { xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); + currentProvider = NULL; + cpuFreq = g_new0 (CpuFreqPlugin, 1); cpuFreq->options = g_new0 (CpuFreqPluginOptions, 1); cpuFreq->plugin = plugin; diff --git a/panel-plugin/xfce4-cpufreq-plugin.h b/panel-plugin/xfce4-cpufreq-plugin.h index a6895e4..6338698 100644 --- a/panel-plugin/xfce4-cpufreq-plugin.h +++ b/panel-plugin/xfce4-cpufreq-plugin.h @@ -95,6 +95,8 @@ typedef struct CpuFreqPlugin *cpuFreq; +GtkCssProvider *currentProvider; + G_BEGIN_DECLS void -- 2.20.1