[gnome-builder] tree: implement treeview level search



commit e1bc9672144c5790f1ae870c938709599a08628e
Author: Christian Hergert <christian hergert me>
Date:   Sat Apr 18 18:56:08 2015 -0700

    tree: implement treeview level search
    
    It's not super useful, since it doesn't recurse into children, but it is
    a feature of GtkTreeView and we should at least support it.
    
    We might want to, instead, setup filtering later on.

 src/tree/gb-tree.c |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)
---
diff --git a/src/tree/gb-tree.c b/src/tree/gb-tree.c
index 66ba186..8ab0cef 100644
--- a/src/tree/gb-tree.c
+++ b/src/tree/gb-tree.c
@@ -1147,6 +1147,35 @@ gb_tree_real_action (GbTree      *self,
   gb_widget_activate_action (GTK_WIDGET (self), prefix, action_name, variant);
 }
 
+static gboolean
+gb_tree_default_search_equal_func (GtkTreeModel *model,
+                                   gint          column,
+                                   const gchar  *key,
+                                   GtkTreeIter  *iter,
+                                   gpointer      user_data)
+{
+  GbTreeNode *node = NULL;
+  gboolean ret = TRUE;
+
+  g_assert (GTK_IS_TREE_MODEL (model));
+  g_assert (column == 0);
+  g_assert (key != NULL);
+  g_assert (iter != NULL);
+
+  gtk_tree_model_get (model, iter, 0, &node, -1);
+
+  if (node != NULL)
+    {
+      const gchar *text;
+
+      text = gb_tree_node_get_text (node);
+      ret = !(strstr (key, text) != NULL);
+      g_object_unref (node);
+    }
+
+  return ret;
+}
+
 /**
  * gb_tree_finalize:
  * @object: (in): A #GbTree.
@@ -1364,6 +1393,11 @@ gb_tree_init (GbTree *tree)
   gtk_tree_view_set_model (GTK_TREE_VIEW (tree),
                            GTK_TREE_MODEL (tree->priv->store));
 
+  gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (tree),
+                                       gb_tree_default_search_equal_func,
+                                       NULL, NULL);
+  gtk_tree_view_set_search_column (GTK_TREE_VIEW (tree), 0);
+
   g_signal_connect (tree, "row-activated",
                     G_CALLBACK (gb_tree_row_activated),
                     NULL);


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