}
if (header->destroy)
- (* header->destroy) (header->data);
+ {
+ GtkDestroyNotify d = header->destroy;
+
+ header->destroy = NULL;
+ d (header->data);
+ }
header->func = func;
header->data = data;
g_return_if_fail (GTK_IS_TREE_MODEL_SORT (sortable));
if (tree_model_sort->default_sort_destroy)
- (* tree_model_sort->default_sort_destroy) (tree_model_sort->default_sort_data);
+ {
+ GtkDestroyNotify d = tree_model_sort->default_sort_destroy;
+
+ tree_model_sort->default_sort_destroy = NULL;
+ d (tree_model_sort->default_sort_data);
+ }
tree_model_sort->default_sort_func = func;
tree_model_sort->default_sort_data = data;
}
else
{
- data.parent_path = gtk_tree_path_new_root ();
+ data.parent_path = gtk_tree_path_new_first ();
}
data.parent_path_depth = gtk_tree_path_get_depth (data.parent_path);
data.parent_path_indices = gtk_tree_path_get_indices (data.parent_path);
elt.ref_count = 0;
elt.children = NULL;
+ /* update all larger offsets */
+ tmp_elt = SORT_ELT (level->array->data);
+ for (i = 0; i < level->array->len; i++, tmp_elt++)
+ if (tmp_elt->offset >= offset)
+ tmp_elt->offset++;
+
if (tree_model_sort->sort_column_id == GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID &&
tree_model_sort->default_sort_func == NO_SORT_FUNC)
index = offset;
FALSE);
g_array_insert_vals (level->array, index, &elt, 1);
-
- /* update all larger offsets */
tmp_elt = SORT_ELT (level->array->data);
for (i = 0; i < level->array->len; i++, tmp_elt++)
- {
- if ((tmp_elt->offset >= offset) && i != index)
- tmp_elt->offset++;
- if (tmp_elt->children)
- tmp_elt->children->parent_elt = tmp_elt;
- }
+ if (tmp_elt->children)
+ tmp_elt->children->parent_elt = tmp_elt;
return TRUE;
}
for (i = 0; i < gtk_tree_path_get_depth (sorted_path); i++)
{
if ((level == NULL) ||
- (level->array->len > sorted_indices[i]))
+ (level->array->len <= sorted_indices[i]))
{
gtk_tree_path_free (retval);
return NULL;
}
if (g_array_index (level->array, SortElt, sorted_indices[i]).children == NULL)
gtk_tree_model_sort_build_level (tree_model_sort, level, &g_array_index (level->array, SortElt, sorted_indices[i]));
+
if (level == NULL)
+ break;
gtk_tree_path_append_index (retval, g_array_index (level->array, SortElt, i).offset);
}
* @child_iter: An uninitialized #GtkTreeIter
* @sorted_iter: A valid #GtkTreeIter pointing to a row on @tree_model_sort.
*
- * Sets @child_iter to point to the row pointed to by *sorted_iter.
+ * Sets @child_iter to point to the row pointed to by @sorted_iter.
**/
void
gtk_tree_model_sort_convert_iter_to_child_iter (GtkTreeModelSort *tree_model_sort,
if (parent_level == NULL)
{
- if (gtk_tree_model_get_iter_root (tree_model_sort->child_model, &iter) == FALSE)
+ if (gtk_tree_model_get_iter_first (tree_model_sort->child_model, &iter) == FALSE)
return;
length = gtk_tree_model_iter_n_children (tree_model_sort->child_model, NULL);
}
g_return_if_fail (GTK_IS_TREE_MODEL_SORT (tree_model_sort));
if (tree_model_sort->default_sort_destroy)
- (* tree_model_sort->default_sort_destroy) (tree_model_sort->default_sort_data);
+ {
+ GtkDestroyNotify d = tree_model_sort->default_sort_destroy;
+
+ tree_model_sort->default_sort_destroy = NULL;
+ d (tree_model_sort->default_sort_data);
+ }
tree_model_sort->default_sort_func = NO_SORT_FUNC;
tree_model_sort->default_sort_data = NULL;