From c9ef2d019e425b76467ad3867eaffa8b51a22726 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 21 Sep 2011 05:44:22 +0200 Subject: [PATCH] fontchooser: Only compare font descriptions when families match This way, we can find fonts way quicker as we only need to create font descriptions for fonts with matching families. Most importantly, we're rather quick in the "the font doesn't exist" case. --- gtk/gtkfontchooserwidget.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gtk/gtkfontchooserwidget.c b/gtk/gtkfontchooserwidget.c index e3844a963c..346c9a4f03 100644 --- a/gtk/gtkfontchooserwidget.c +++ b/gtk/gtkfontchooserwidget.c @@ -874,6 +874,13 @@ gtk_font_chooser_widget_finalize (GObject *object) G_OBJECT_CLASS (gtk_font_chooser_widget_parent_class)->finalize (object); } +static gboolean +my_pango_font_family_equal (const char *familya, + const char *familyb) +{ + return g_ascii_strcasecmp (familya, familyb) == 0; +} + static gboolean gtk_font_chooser_widget_find_font (GtkFontChooserWidget *fontchooser, const PangoFontDescription *font_desc, @@ -882,12 +889,24 @@ gtk_font_chooser_widget_find_font (GtkFontChooserWidget *fontchooser, { GtkFontChooserWidgetPrivate *priv = fontchooser->priv; PangoFontDescription *desc; + PangoFontFamily *family; gboolean valid; + if (pango_font_description_get_family (font_desc) == NULL) + return FALSE; + for (valid = gtk_tree_model_get_iter_first (priv->model, iter); valid; valid = gtk_tree_model_iter_next (priv->model, iter)) { + gtk_tree_model_get (priv->model, iter, + FAMILY_COLUMN, &family, + -1); + + if (!my_pango_font_family_equal (pango_font_description_get_family (font_desc), + pango_font_family_get_name (family))) + continue; + desc = tree_model_get_font_description (priv->model, iter); pango_font_description_merge_static (desc, font_desc, FALSE);