[gnome-control-center/wip/carlosg/wacom-calibrator-style-leaks: 2/2] wacom: Dispose custom style provider with calibrator



commit 8f825c5cc0d52845d85349d4399cc84bf2ecaa27
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed May 1 16:06:59 2019 +0200

    wacom: Dispose custom style provider with calibrator
    
    Each CalibArea created adds a style provider that is never removed,
    remove it on calib_area_free() to avoid the leak.
    
    https://gitlab.gnome.org/GNOME/gnome-control-center/issues/504

 panels/wacom/calibrator/calibrator-gui.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
---
diff --git a/panels/wacom/calibrator/calibrator-gui.c b/panels/wacom/calibrator/calibrator-gui.c
index 661fc519d..caff030c8 100644
--- a/panels/wacom/calibrator/calibrator-gui.c
+++ b/panels/wacom/calibrator/calibrator-gui.c
@@ -46,6 +46,7 @@ struct CalibArea
   GtkBuilder *builder;
   GtkWidget  *error_revealer;
   GtkWidget  *clock;
+  GtkCssProvider *style_provider;
 
   FinishCallback callback;
   gpointer       user_data;
@@ -310,7 +311,6 @@ calib_area_new (GdkScreen      *screen,
   GdkWindow *window;
   GdkCursor *cursor;
 #endif /* FAKE_AREA */
-  GtkCssProvider *provider;
   GtkGesture *press;
 
   g_return_val_if_fail (callback, NULL);
@@ -328,11 +328,10 @@ calib_area_new (GdkScreen      *screen,
   calib_area->window = GTK_WIDGET (gtk_builder_get_object (calib_area->builder, "window"));
   calib_area->error_revealer = GTK_WIDGET (gtk_builder_get_object (calib_area->builder, "error_revealer"));
   calib_area->clock = GTK_WIDGET (gtk_builder_get_object (calib_area->builder, "clock"));
-
-  provider = gtk_css_provider_new ();
-  gtk_css_provider_load_from_resource (provider, 
"/org/gnome/control-center/wacom/calibrator/calibrator.css");
+  calib_area->style_provider = gtk_css_provider_new ();
+  gtk_css_provider_load_from_resource (calib_area->style_provider, 
"/org/gnome/control-center/wacom/calibrator/calibrator.css");
   gtk_style_context_add_provider_for_screen (gtk_widget_get_screen (calib_area->window),
-                                             GTK_STYLE_PROVIDER (provider),
+                                             GTK_STYLE_PROVIDER (calib_area->style_provider),
                                              GTK_STYLE_PROVIDER_PRIORITY_USER);
 
   cc_clock_set_duration (CC_CLOCK (calib_area->clock), MAX_TIME);
@@ -420,6 +419,8 @@ calib_area_free (CalibArea *area)
 {
   g_return_if_fail (area != NULL);
 
+  gtk_style_context_remove_provider_for_screen (gtk_widget_get_screen (area->window),
+                                                GTK_STYLE_PROVIDER (area->style_provider));
   gtk_widget_destroy (area->window);
   g_free (area);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]