From 9a6c913d89998beb3bf7c666e0806a69d90ba57e Mon Sep 17 00:00:00 2001 From: deepend-tildeclub Date: Thu, 2 Jul 2026 13:08:48 -0600 Subject: [PATCH] Fix channel tree font ownership/lifetime --- src/fe-gtk/chanview.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/fe-gtk/chanview.c b/src/fe-gtk/chanview.c index fae743a2..7bc7ca7f 100644 --- a/src/fe-gtk/chanview.c +++ b/src/fe-gtk/chanview.c @@ -79,6 +79,8 @@ struct _chanview guint theme_listener_id; }; +static void chanview_set_font_desc (chanview *cv, const PangoFontDescription *font_desc); + struct _chan { chanview *cv; /* our owner */ @@ -169,6 +171,7 @@ chanview_apply_theme (chanview *cv) w = GTK_WIDGET (tv->tree); if (input_style) font = input_style->font_desc; + chanview_set_font_desc (cv, font); theme_manager_apply_channel_tree_style (w, theme_manager_get_channel_tree_palette_behavior (font)); @@ -313,6 +316,14 @@ chanview_free_ch (chanview *cv, GtkTreeIter *iter) g_free (ch); } +static void +chanview_set_font_desc (chanview *cv, const PangoFontDescription *font_desc) +{ + if (cv->font_desc) + pango_font_description_free (cv->font_desc); + cv->font_desc = font_desc ? pango_font_description_copy (font_desc) : NULL; +} + static void chanview_destroy_store (chanview *cv) /* free every (chan *) in the store */ { @@ -335,6 +346,9 @@ chanview_destroy (chanview *cv) if (cv->box) gtk_widget_destroy (cv->box); + if (cv->font_desc) + pango_font_description_free (cv->font_desc); + chanview_destroy_store (cv); g_free (cv); } @@ -356,7 +370,7 @@ chanview_new (int type, int trunc_len, gboolean sort, gboolean use_icons, cv = g_new0 (chanview, 1); cv->store = gtk_tree_store_new (5, G_TYPE_STRING, G_TYPE_POINTER, PANGO_TYPE_ATTR_LIST, GDK_TYPE_PIXBUF, G_TYPE_INT); - cv->font_desc = font_desc; + cv->font_desc = font_desc ? pango_font_description_copy (font_desc) : NULL; cv->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); cv->trunc_len = trunc_len; cv->sorted = sort;