[gtk/fix-icontheme-invalidation: 5/14] css: keep a ref on the icon theme



commit 39c25c93eeeb56c3fd9271e865a04a3a96ec5ffd
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Apr 21 20:41:59 2020 -0400

    css: keep a ref on the icon theme
    
    If we don't, then closing displays hangs :(
    Previously, the icontheme css value would ensure
    that there's a ref around.

 gtk/gtkcssimageicontheme.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkcssimageicontheme.c b/gtk/gtkcssimageicontheme.c
index 4fed08546b..fe32ec0986 100644
--- a/gtk/gtkcssimageicontheme.c
+++ b/gtk/gtkcssimageicontheme.c
@@ -145,10 +145,14 @@ gtk_css_image_icon_theme_compute (GtkCssImage      *image,
 {
   GtkCssImageIconTheme *icon_theme = GTK_CSS_IMAGE_ICON_THEME (image);
   GtkCssImageIconTheme *copy;
+  GtkSettings *settings;
+  GdkDisplay *display;
 
   copy = g_object_new (GTK_TYPE_CSS_IMAGE_ICON_THEME, NULL);
   copy->name = g_strdup (icon_theme->name);
-  copy->icon_theme = icon_theme->icon_theme;
+  settings = gtk_style_provider_get_settings (provider);
+  display = _gtk_settings_get_display (settings);
+  copy->icon_theme = g_object_ref (gtk_icon_theme_get_for_display (display));
   copy->scale = gtk_style_provider_get_scale (provider);
   gtk_icon_theme_lookup_symbolic_colors (style, &copy->color, &copy->success, &copy->warning, &copy->error);
 
@@ -173,6 +177,7 @@ gtk_css_image_icon_theme_dispose (GObject *object)
   g_free (icon_theme->name);
   icon_theme->name = NULL;
 
+  g_clear_object (&icon_theme->icon_theme);
   g_clear_object (&icon_theme->cached_icon);
 
   G_OBJECT_CLASS (_gtk_css_image_icon_theme_parent_class)->dispose (object);
@@ -197,7 +202,7 @@ _gtk_css_image_icon_theme_class_init (GtkCssImageIconThemeClass *klass)
 static void
 _gtk_css_image_icon_theme_init (GtkCssImageIconTheme *icon_theme)
 {
-  icon_theme->icon_theme = gtk_icon_theme_get_for_display (gdk_display_get_default ());
+  icon_theme->icon_theme = g_object_ref (gtk_icon_theme_get_for_display (gdk_display_get_default ()));
   icon_theme->scale = 1;
   icon_theme->cached_size = -1;
   icon_theme->cached_icon = NULL;


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