]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktreemodelfilter.c
Fix #314335
[~andy/gtk] / gtk / gtktreemodelfilter.c
index 3eb71d5ed2a2f1ccee7fb0ff8c80c16de50646dc..13e2293996e3910fedf2e0a9ab976f4051910710 100644 (file)
  */
 
 #include <config.h>
-#include "gtkalias.h"
 #include "gtktreemodelfilter.h"
 #include "gtkintl.h"
 #include "gtktreednd.h"
+#include "gtkalias.h"
+#include "gtkprivate.h"
 #include <string.h>
 
 /* ITER FORMAT:
@@ -327,7 +328,7 @@ gtk_tree_model_filter_class_init (GtkTreeModelFilterClass *filter_class)
                                                         ("The child model"),
                                                         ("The model for the filtermodel to filter"),
                                                         GTK_TYPE_TREE_MODEL,
-                                                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+                                                        GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
   g_object_class_install_property (object_class,
                                    PROP_VIRTUAL_ROOT,
@@ -335,7 +336,7 @@ gtk_tree_model_filter_class_init (GtkTreeModelFilterClass *filter_class)
                                                        ("The virtual root"),
                                                        ("The virtual root (relative to the child model) for this filtermodel"),
                                                        GTK_TYPE_TREE_PATH,
-                                                       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+                                                       GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
   g_type_class_add_private (object_class, sizeof (GtkTreeModelFilterPrivate));
 }
@@ -685,9 +686,10 @@ gtk_tree_model_filter_visible (GtkTreeModelFilter *filter,
 {
   if (filter->priv->visible_func)
     {
-      return (filter->priv->visible_func (filter->priv->child_model,
-                                    child_iter,
-                                    filter->priv->visible_data));
+      return filter->priv->visible_func (filter->priv->child_model,
+                                        child_iter,
+                                        filter->priv->visible_data)
+       ? TRUE : FALSE:
     }
   else if (filter->priv->visible_column >= 0)
    {
@@ -826,7 +828,10 @@ gtk_tree_model_filter_fetch_child (GtkTreeModelFilter *filter,
   g_array_insert_val (level->array, i, elt);
   *index = i;
 
-  for (i = MAX (--i, 0); i < level->array->len; i++)
+  if (i > 0)
+    i--;
+
+  for ( ; i < level->array->len; i++)
     {
       FilterElt *e = &(g_array_index (level->array, FilterElt, i));
       if (e->children)
@@ -902,7 +907,8 @@ gtk_tree_model_filter_remove_node (GtkTreeModelFilter *filter,
         {
           g_array_remove_index (level->array, i);
 
-          for (i = MAX (--i, 0); i < level->array->len; i++)
+         i--;
+          for (i = MAX (i, 0); i < level->array->len; i++)
             {
               /* NOTE: here we do *not* decrease offsets, because the node was
                * not removed from the child model
@@ -1590,7 +1596,8 @@ gtk_tree_model_filter_row_deleted (GtkTreeModel *c_model,
       offset = tmp->offset;
       g_array_remove_index (level->array, i);
 
-      for (i = MAX (--i, 0); i < level->array->len; i++)
+      i--;
+      for (i = MAX (i, 0); i < level->array->len; i++)
         {
           elt = &g_array_index (level->array, FilterElt, i);
           if (elt->offset > offset)
@@ -2421,8 +2428,8 @@ gtk_tree_model_filter_new (GtkTreeModel *child_model,
   g_return_val_if_fail (GTK_IS_TREE_MODEL (child_model), NULL);
 
   retval = g_object_new (GTK_TYPE_TREE_MODEL_FILTER, 
-                        "child_model", child_model,
-                        "virtual_root", root,
+                        "child-model", child_model,
+                        "virtual-root", root,
                         NULL);
 
   return retval;
@@ -2457,6 +2464,11 @@ gtk_tree_model_filter_get_model (GtkTreeModelFilter *filter)
  * function should return %TRUE if the given row should be visible and
  * %FALSE otherwise.
  *
+ * If the condition calculated by the function changes over time (e.g. because
+ * it depends on some global parameters), you must call 
+ * gtk_tree_model_filter_refilter() to keep the visibility information of 
+ * the model uptodate.
+ *
  * Since: 2.4
  */
 void
@@ -2875,3 +2887,6 @@ gtk_tree_model_filter_clear_cache (GtkTreeModelFilter *filter)
     gtk_tree_model_filter_clear_cache_helper (filter,
                                               FILTER_LEVEL (filter->priv->root));
 }
+
+#define __GTK_TREE_MODEL_FILTER_C__
+#include "gtkaliasdef.c"