[gtk+] fontchooser: Move the filter func to the visibility func



commit 6d8010d3d409bfab85eccab6af9fb25a643954aa
Author: Benjamin Otte <otte redhat com>
Date:   Mon Sep 19 15:45:24 2011 +0200

    fontchooser: Move the filter func to the visibility func
    
    ... instead of rereading all the fonts every time.
    
    With this change, the liststore now contains every font face known to
    GTK, so we can actually walk it for matching fonts.

 gtk/gtkfontchooserwidget.c |   27 ++++++++++++++++++++-------
 1 files changed, 20 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkfontchooserwidget.c b/gtk/gtkfontchooserwidget.c
index 9ea47b1..1bd1405 100644
--- a/gtk/gtkfontchooserwidget.c
+++ b/gtk/gtkfontchooserwidget.c
@@ -752,10 +752,6 @@ populate_list (GtkFontChooserWidget *fontchooser,
           const gchar *face_name;
           gchar *font_desc;
 
-          if (priv->filter_func != NULL &&
-              !priv->filter_func (families[i], faces[j], priv->filter_data))
-            continue;
-
           pango_desc = pango_font_face_describe (faces[j]);
           face_name = pango_font_face_get_face_name (faces[j]);
           font_desc = pango_font_description_to_string (pango_desc);
@@ -831,6 +827,25 @@ visible_func (GtkTreeModel *model,
   gchar *font_name, *font_name_casefold, *term_casefold;
   guint i;
 
+  if (priv->filter_func != NULL)
+    {
+      PangoFontFamily *family;
+      PangoFontFace *face;
+
+      gtk_tree_model_get (model, iter,
+                          FAMILY_COLUMN, &family,
+                          FACE_COLUMN, &face,
+                          -1);
+
+      result = priv->filter_func (family, face, priv->filter_data);
+
+      g_object_unref (family);
+      g_object_unref (face);
+      
+      if (!result)
+        return FALSE;
+    }
+
   /* If there's no filter string we show the item */
   search_text = gtk_entry_get_text (GTK_ENTRY (priv->search_entry));
   if (strlen (search_text) == 0)
@@ -1190,9 +1205,7 @@ gtk_font_chooser_widget_set_filter_func (GtkFontChooser  *chooser,
   priv->filter_data = data;
   priv->filter_data_destroy = destroy;
 
-  populate_list (fontchooser,
-                 GTK_TREE_VIEW (priv->family_face_list),
-                 priv->model);
+  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (priv->filter_model));
 }
 
 static void



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