*/
#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:
*/
g_object_class_install_property (object_class,
PROP_CHILD_MODEL,
- g_param_spec_object ("child_model",
+ g_param_spec_object ("child-model",
("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,
- g_param_spec_boxed ("virtual_root",
+ g_param_spec_boxed ("virtual-root",
("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));
}
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)
{
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
}
}
+ gtk_tree_model_filter_increment_stamp (filter);
+
if (!path)
path = gtk_real_tree_model_filter_convert_child_path_to_path (filter,
c_path,
TRUE,
TRUE);
- g_return_if_fail (path != NULL);
+ if (!path)
+ /* parent is probably being filtered out */
+ goto done;
- gtk_tree_model_filter_increment_stamp (filter);
gtk_tree_model_get_iter (GTK_TREE_MODEL (filter), &iter, path);
level = FILTER_LEVEL (iter.user_data);
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)
if (filter->priv->child_model)
{
- g_signal_handler_disconnect (G_OBJECT (filter->priv->child_model),
+ g_signal_handler_disconnect (filter->priv->child_model,
filter->priv->changed_id);
- g_signal_handler_disconnect (G_OBJECT (filter->priv->child_model),
+ g_signal_handler_disconnect (filter->priv->child_model,
filter->priv->inserted_id);
- g_signal_handler_disconnect (G_OBJECT (filter->priv->child_model),
+ g_signal_handler_disconnect (filter->priv->child_model,
filter->priv->has_child_toggled_id);
- g_signal_handler_disconnect (G_OBJECT (filter->priv->child_model),
+ g_signal_handler_disconnect (filter->priv->child_model,
filter->priv->deleted_id);
- g_signal_handler_disconnect (G_OBJECT (filter->priv->child_model),
+ g_signal_handler_disconnect (filter->priv->child_model,
filter->priv->reordered_id);
/* reset our state */
gtk_tree_model_filter_free_level (filter, filter->priv->root);
filter->priv->root = NULL;
- g_object_unref (G_OBJECT (filter->priv->child_model));
+ g_object_unref (filter->priv->child_model);
filter->priv->visible_column = -1;
/* FIXME: destroy more crack here? the funcs? */
}
if (child_model)
{
- g_object_ref (G_OBJECT (filter->priv->child_model));
+ g_object_ref (filter->priv->child_model);
filter->priv->changed_id =
g_signal_connect (child_model, "row_changed",
G_CALLBACK (gtk_tree_model_filter_row_changed),
g_return_val_if_fail (GTK_IS_TREE_MODEL (child_model), NULL);
- retval = GTK_TREE_MODEL (g_object_new (GTK_TYPE_TREE_MODEL_FILTER,
- "child_model", child_model,
- "virtual_root", root,
- NULL));
+ retval = g_object_new (GTK_TYPE_TREE_MODEL_FILTER,
+ "child-model", child_model,
+ "virtual-root", root,
+ NULL);
return retval;
}
* 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
gtk_tree_model_filter_clear_cache_helper (filter,
FILTER_LEVEL (filter->priv->root));
}
+
+#define __GTK_TREE_MODEL_FILTER_C__
+#include "gtkaliasdef.c"