From 506d59f52666bd0f43ff950e46dd0b196e07f729 Mon Sep 17 00:00:00 2001 From: Christophe Fergeau Date: Thu, 23 Oct 2014 21:13:29 +0200 Subject: [PATCH] Return correct font from gtk_font_chooser_widget_find_font Commit 30a1c4ab fixed several memleaks including one in gtk_font_chooser_widget_find_font. However, the fix causes one extra call to gtk_tree_model_iter_next() after finding the font we look for (ie pango_font_description_equal returns TRUE): the 'increment' part of the for loop (gtk_tree_model_iter_next) is run before the 'exit condition' of the for loop is evaluated. This commit reverts this part of commit 30a1c4ab and adds an extra call to pango_font_description_free in order to fix the leak. https://bugzilla.gnome.org/show_bug.cgi?id=739111 --- gtk/gtkfontchooserwidget.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/gtk/gtkfontchooserwidget.c b/gtk/gtkfontchooserwidget.c index f2865b528d..5fc82b264a 100644 --- a/gtk/gtkfontchooserwidget.c +++ b/gtk/gtkfontchooserwidget.c @@ -897,18 +897,18 @@ gtk_font_chooser_widget_find_font (GtkFontChooserWidget *fontchooser, GtkTreeIter *iter) { GtkFontChooserWidgetPrivate *priv = fontchooser->priv; - PangoFontDescription *desc; - PangoFontFamily *family; - gboolean valid, found; + gboolean valid; if (pango_font_description_get_family (font_desc) == NULL) return FALSE; - found = FALSE; for (valid = gtk_tree_model_get_iter_first (priv->model, iter); - valid && !found; + valid; valid = gtk_tree_model_iter_next (priv->model, iter)) { + PangoFontDescription *desc; + PangoFontFamily *family; + gtk_tree_model_get (priv->model, iter, FAMILY_COLUMN, &family, -1); @@ -920,13 +920,15 @@ gtk_font_chooser_widget_find_font (GtkFontChooserWidget *fontchooser, desc = tree_model_get_font_description (priv->model, iter); pango_font_description_merge_static (desc, font_desc, FALSE); - if (pango_font_description_equal (desc, font_desc)) - found = TRUE; + if (pango_font_description_equal (desc, font_desc)) { + pango_font_description_free (desc); + break; + } pango_font_description_free (desc); } - return found; + return valid; } static void