[gtk/fix-icontheme-invalidation: 5/14] css: keep a ref on the icon theme
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/fix-icontheme-invalidation: 5/14] css: keep a ref on the icon theme
- Date: Wed, 22 Apr 2020 01:07:34 +0000 (UTC)
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, ©->color, ©->success, ©->warning, ©->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]