+Fri Feb 8 21:25:56 2002 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_deleted): fix
+ evil ref bug where the wrong row and a deleted row was unreffed.
+ Found by Darin Adler <darin@bentspoon.com>
+
Fri Feb 8 18:46:13 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkbindings.[ch] (_gtk_binding_reset_parsed): Add
+Fri Feb 8 21:25:56 2002 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_deleted): fix
+ evil ref bug where the wrong row and a deleted row was unreffed.
+ Found by Darin Adler <darin@bentspoon.com>
+
Fri Feb 8 18:46:13 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkbindings.[ch] (_gtk_binding_reset_parsed): Add
+Fri Feb 8 21:25:56 2002 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_deleted): fix
+ evil ref bug where the wrong row and a deleted row was unreffed.
+ Found by Darin Adler <darin@bentspoon.com>
+
Fri Feb 8 18:46:13 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkbindings.[ch] (_gtk_binding_reset_parsed): Add
+Fri Feb 8 21:25:56 2002 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_deleted): fix
+ evil ref bug where the wrong row and a deleted row was unreffed.
+ Found by Darin Adler <darin@bentspoon.com>
+
Fri Feb 8 18:46:13 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkbindings.[ch] (_gtk_binding_reset_parsed): Add
+Fri Feb 8 21:25:56 2002 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_deleted): fix
+ evil ref bug where the wrong row and a deleted row was unreffed.
+ Found by Darin Adler <darin@bentspoon.com>
+
Fri Feb 8 18:46:13 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkbindings.[ch] (_gtk_binding_reset_parsed): Add
+Fri Feb 8 21:25:56 2002 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_deleted): fix
+ evil ref bug where the wrong row and a deleted row was unreffed.
+ Found by Darin Adler <darin@bentspoon.com>
+
Fri Feb 8 18:46:13 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkbindings.[ch] (_gtk_binding_reset_parsed): Add
+Fri Feb 8 21:25:56 2002 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_deleted): fix
+ evil ref bug where the wrong row and a deleted row was unreffed.
+ Found by Darin Adler <darin@bentspoon.com>
+
Fri Feb 8 18:46:13 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkbindings.[ch] (_gtk_binding_reset_parsed): Add
void gtk_list_store_set_column_types (GtkListStore *list_store,
gint n_columns,
GType *types);
+
+/* NOTE: use gtk_tree_model_get to get values from a GtkListStore */
+
void gtk_list_store_set_value (GtkListStore *list_store,
GtkTreeIter *iter,
gint column,
GtkTreeIter *child);
static void gtk_tree_model_sort_ref_node (GtkTreeModel *tree_model,
GtkTreeIter *iter);
+static void gtk_tree_model_sort_real_unref_node (GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gboolean propagate_unref);
static void gtk_tree_model_sort_unref_node (GtkTreeModel *tree_model,
GtkTreeIter *iter);
elt = SORT_ELT (iter.user_data2);
offset = elt->offset;
- gtk_tree_model_sort_increment_stamp (tree_model_sort);
- gtk_tree_model_row_deleted (GTK_TREE_MODEL (data), path);
-
while (elt->ref_count > 0)
- gtk_tree_model_sort_unref_node (GTK_TREE_MODEL (data), &iter);
+ gtk_tree_model_sort_real_unref_node (GTK_TREE_MODEL (data), &iter, FALSE);
if (level->ref_count == 0 && level != tree_model_sort->root)
{
/* This will prune the level, so I can just emit the signal and not worry
* about cleaning this level up. */
-
+ gtk_tree_model_sort_increment_stamp (tree_model_sort);
+ gtk_tree_model_row_deleted (GTK_TREE_MODEL (data), path);
gtk_tree_path_free (path);
return;
}
+ gtk_tree_model_sort_increment_stamp (tree_model_sort);
+ gtk_tree_model_row_deleted (GTK_TREE_MODEL (data), path);
+
/* Remove the row */
for (i = 0; i < level->array->len; i++)
if (elt->offset == g_array_index (level->array, SortElt, i).offset)
}
static void
-gtk_tree_model_sort_unref_node (GtkTreeModel *tree_model,
- GtkTreeIter *iter)
+gtk_tree_model_sort_real_unref_node (GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gboolean propagate_unref)
{
GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *) tree_model;
GtkTreeIter child_iter;
GET_CHILD_ITER (tree_model, &child_iter, iter);
- gtk_tree_model_unref_node (GTK_TREE_MODEL_SORT (tree_model)->child_model, &child_iter);
+ if (propagate_unref)
+ gtk_tree_model_unref_node (GTK_TREE_MODEL_SORT (tree_model)->child_model, &child_iter);
level = iter->user_data;
elt = iter->user_data2;
}
}
+static void
+gtk_tree_model_sort_unref_node (GtkTreeModel *tree_model,
+ GtkTreeIter *iter)
+{
+ gtk_tree_model_sort_real_unref_node (tree_model, iter, TRUE);
+}
+
/* Sortable interface */
static gboolean
gtk_tree_model_sort_get_sort_column_id (GtkTreeSortable *sortable,
void gtk_tree_store_set_column_types (GtkTreeStore *tree_store,
gint n_columns,
GType *types);
+
+/* NOTE: use gtk_tree_model_get to get values from a GtkTreeStore */
+
void gtk_tree_store_set_value (GtkTreeStore *tree_store,
GtkTreeIter *iter,
gint column,