fix a load of open line ends, (gtk_tree_model_sort_set_model): only free

Tue Jan 15 01:13:51 2002  Kristian Rietveld  <kris@gtk.org>

        * gtk/gtktreemodelsort.c: fix a load of open line ends,
        (gtk_tree_model_sort_set_model): only free root level if it's
        !NULL
This commit is contained in:
Kristian Rietveld
2002-01-15 00:12:30 +00:00
committed by Kristian Rietveld
parent 322100dc38
commit 953e0702b9
8 changed files with 111 additions and 68 deletions

View File

@ -1,3 +1,9 @@
Tue Jan 15 01:13:51 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreemodelsort.c: fix a load of open line ends,
(gtk_tree_model_sort_set_model): only free root level if it's
!NULL
2002-01-14 Matthias Clasen <matthiasc@poet.de> 2002-01-14 Matthias Clasen <matthiasc@poet.de>
* gtk/gtkoldeditable.c, gtk/gtkrc.c, * gtk/gtkoldeditable.c, gtk/gtkrc.c,

View File

@ -1,3 +1,9 @@
Tue Jan 15 01:13:51 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreemodelsort.c: fix a load of open line ends,
(gtk_tree_model_sort_set_model): only free root level if it's
!NULL
2002-01-14 Matthias Clasen <matthiasc@poet.de> 2002-01-14 Matthias Clasen <matthiasc@poet.de>
* gtk/gtkoldeditable.c, gtk/gtkrc.c, * gtk/gtkoldeditable.c, gtk/gtkrc.c,

View File

@ -1,3 +1,9 @@
Tue Jan 15 01:13:51 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreemodelsort.c: fix a load of open line ends,
(gtk_tree_model_sort_set_model): only free root level if it's
!NULL
2002-01-14 Matthias Clasen <matthiasc@poet.de> 2002-01-14 Matthias Clasen <matthiasc@poet.de>
* gtk/gtkoldeditable.c, gtk/gtkrc.c, * gtk/gtkoldeditable.c, gtk/gtkrc.c,

View File

@ -1,3 +1,9 @@
Tue Jan 15 01:13:51 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreemodelsort.c: fix a load of open line ends,
(gtk_tree_model_sort_set_model): only free root level if it's
!NULL
2002-01-14 Matthias Clasen <matthiasc@poet.de> 2002-01-14 Matthias Clasen <matthiasc@poet.de>
* gtk/gtkoldeditable.c, gtk/gtkrc.c, * gtk/gtkoldeditable.c, gtk/gtkrc.c,

View File

@ -1,3 +1,9 @@
Tue Jan 15 01:13:51 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreemodelsort.c: fix a load of open line ends,
(gtk_tree_model_sort_set_model): only free root level if it's
!NULL
2002-01-14 Matthias Clasen <matthiasc@poet.de> 2002-01-14 Matthias Clasen <matthiasc@poet.de>
* gtk/gtkoldeditable.c, gtk/gtkrc.c, * gtk/gtkoldeditable.c, gtk/gtkrc.c,

View File

@ -1,3 +1,9 @@
Tue Jan 15 01:13:51 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreemodelsort.c: fix a load of open line ends,
(gtk_tree_model_sort_set_model): only free root level if it's
!NULL
2002-01-14 Matthias Clasen <matthiasc@poet.de> 2002-01-14 Matthias Clasen <matthiasc@poet.de>
* gtk/gtkoldeditable.c, gtk/gtkrc.c, * gtk/gtkoldeditable.c, gtk/gtkrc.c,

View File

@ -1,3 +1,9 @@
Tue Jan 15 01:13:51 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreemodelsort.c: fix a load of open line ends,
(gtk_tree_model_sort_set_model): only free root level if it's
!NULL
2002-01-14 Matthias Clasen <matthiasc@poet.de> 2002-01-14 Matthias Clasen <matthiasc@poet.de>
* gtk/gtkoldeditable.c, gtk/gtkrc.c, * gtk/gtkoldeditable.c, gtk/gtkrc.c,

View File

@ -80,7 +80,7 @@ struct _SortData
struct _SortTuple struct _SortTuple
{ {
SortElt *elt; SortElt *elt;
gint offset; gint offset;
}; };
/* Properties */ /* Properties */
@ -223,7 +223,7 @@ GType
gtk_tree_model_sort_get_type (void) gtk_tree_model_sort_get_type (void)
{ {
static GType tree_model_sort_type = 0; static GType tree_model_sort_type = 0;
if (!tree_model_sort_type) if (!tree_model_sort_type)
{ {
static const GTypeInfo tree_model_sort_info = static const GTypeInfo tree_model_sort_info =
@ -259,7 +259,7 @@ gtk_tree_model_sort_get_type (void)
g_type_add_interface_static (tree_model_sort_type, g_type_add_interface_static (tree_model_sort_type,
GTK_TYPE_TREE_MODEL, GTK_TYPE_TREE_MODEL,
&tree_model_info); &tree_model_info);
g_type_add_interface_static (tree_model_sort_type, g_type_add_interface_static (tree_model_sort_type,
GTK_TYPE_TREE_SORTABLE, GTK_TYPE_TREE_SORTABLE,
&sortable_info); &sortable_info);
@ -421,7 +421,7 @@ gtk_tree_model_sort_row_changed (GtkTreeModel *s_model,
GtkTreePath *path = NULL; GtkTreePath *path = NULL;
GtkTreeIter iter; GtkTreeIter iter;
GtkTreeIter tmpiter; GtkTreeIter tmpiter;
SortElt tmp; SortElt tmp;
SortElt *elt; SortElt *elt;
SortLevel *level; SortLevel *level;
@ -453,19 +453,19 @@ gtk_tree_model_sort_row_changed (GtkTreeModel *s_model,
} }
gtk_tree_model_get_iter (GTK_TREE_MODEL (data), &iter, path); gtk_tree_model_get_iter (GTK_TREE_MODEL (data), &iter, path);
level = iter.user_data; level = iter.user_data;
elt = iter.user_data2; elt = iter.user_data2;
if (level->array->len < 2 || tree_model_sort->sort_column_id == -1) if (level->array->len < 2 || tree_model_sort->sort_column_id == -1)
{ {
if (free_s_path) if (free_s_path)
gtk_tree_path_free (start_s_path); gtk_tree_path_free (start_s_path);
gtk_tree_model_row_changed (GTK_TREE_MODEL (data), path, &iter); gtk_tree_model_row_changed (GTK_TREE_MODEL (data), path, &iter);
gtk_tree_path_free (path); gtk_tree_path_free (path);
return; return;
} }
@ -480,7 +480,7 @@ gtk_tree_model_sort_row_changed (GtkTreeModel *s_model,
for (i = 0; i < level->array->len; i++) for (i = 0; i < level->array->len; i++)
if (elt->offset == g_array_index (level->array, SortElt, i).offset) if (elt->offset == g_array_index (level->array, SortElt, i).offset)
index = i; index = i;
memcpy (&tmp, elt, sizeof (SortElt)); memcpy (&tmp, elt, sizeof (SortElt));
g_array_remove_index (level->array, index); g_array_remove_index (level->array, index);
@ -494,19 +494,19 @@ gtk_tree_model_sort_row_changed (GtkTreeModel *s_model,
level, level,
&tmpiter, &tmpiter,
TRUE); TRUE);
g_array_insert_val (level->array, index, tmp); g_array_insert_val (level->array, index, tmp);
for (i = 0; i < level->array->len; i++) for (i = 0; i < level->array->len; i++)
if (g_array_index (level->array, SortElt, i).children) if (g_array_index (level->array, SortElt, i).children)
g_array_index (level->array, SortElt, i).children->parent_elt = &g_array_index (level->array, SortElt, i); g_array_index (level->array, SortElt, i).children->parent_elt = &g_array_index (level->array, SortElt, i);
gtk_tree_path_up (path); gtk_tree_path_up (path);
gtk_tree_path_append_index (path, index); gtk_tree_path_append_index (path, index);
gtk_tree_model_sort_increment_stamp (tree_model_sort); gtk_tree_model_sort_increment_stamp (tree_model_sort);
gtk_tree_model_get_iter (GTK_TREE_MODEL (data), &iter, path); gtk_tree_model_get_iter (GTK_TREE_MODEL (data), &iter, path);
gtk_tree_model_row_changed (GTK_TREE_MODEL (data), path, &iter); gtk_tree_model_row_changed (GTK_TREE_MODEL (data), path, &iter);
gtk_tree_path_free (path); gtk_tree_path_free (path);
@ -540,13 +540,13 @@ gtk_tree_model_sort_row_inserted (GtkTreeModel *s_model,
#endif #endif
g_return_if_fail (s_path != NULL || s_iter != NULL); g_return_if_fail (s_path != NULL || s_iter != NULL);
if (!s_path) if (!s_path)
{ {
s_path = gtk_tree_model_get_path (s_model, s_iter); s_path = gtk_tree_model_get_path (s_model, s_iter);
free_s_path = TRUE; free_s_path = TRUE;
} }
if (!s_iter) if (!s_iter)
gtk_tree_model_get_iter (s_model, &real_s_iter, s_path); gtk_tree_model_get_iter (s_model, &real_s_iter, s_path);
else else
@ -558,10 +558,10 @@ gtk_tree_model_sort_row_inserted (GtkTreeModel *s_model,
/* the build level already put the inserted iter in the level, /* the build level already put the inserted iter in the level,
so no need to handle this signal anymore */ so no need to handle this signal anymore */
goto done_and_submit; goto done_and_submit;
} }
/* find the parent level */ /* find the parent level */
while (i < gtk_tree_path_get_depth (s_path) - 1) while (i < gtk_tree_path_get_depth (s_path) - 1)
{ {
@ -580,7 +580,7 @@ gtk_tree_model_sort_row_inserted (GtkTreeModel *s_model,
"before the parent was inserted."); "before the parent was inserted.");
goto done; goto done;
} }
elt = NULL; elt = NULL;
for (j = 0; j < level->array->len; j++) for (j = 0; j < level->array->len; j++)
if (g_array_index (level->array, SortElt, j).offset == gtk_tree_path_get_indices (s_path)[i]) if (g_array_index (level->array, SortElt, j).offset == gtk_tree_path_get_indices (s_path)[i])
@ -595,7 +595,7 @@ gtk_tree_model_sort_row_inserted (GtkTreeModel *s_model,
{ {
GtkTreePath *tmppath; GtkTreePath *tmppath;
GtkTreeIter tmpiter; GtkTreeIter tmpiter;
tmppath = gtk_tree_model_sort_elt_get_path (level, elt); tmppath = gtk_tree_model_sort_elt_get_path (level, elt);
if (tmppath) if (tmppath)
{ {
@ -615,26 +615,26 @@ gtk_tree_model_sort_row_inserted (GtkTreeModel *s_model,
parent_level = level; parent_level = level;
i++; i++;
} }
if (!parent_level) if (!parent_level)
goto done; goto done;
if (!gtk_tree_model_sort_insert_value (tree_model_sort, if (!gtk_tree_model_sort_insert_value (tree_model_sort,
parent_level, parent_level,
s_path, s_path,
&real_s_iter)) &real_s_iter))
goto done; goto done;
done_and_submit: done_and_submit:
path = gtk_real_tree_model_sort_convert_child_path_to_path (tree_model_sort, path = gtk_real_tree_model_sort_convert_child_path_to_path (tree_model_sort,
s_path, s_path,
FALSE); FALSE);
if (!path) if (!path)
return; return;
gtk_tree_model_sort_increment_stamp (tree_model_sort); gtk_tree_model_sort_increment_stamp (tree_model_sort);
gtk_tree_model_get_iter (GTK_TREE_MODEL (data), &iter, path); gtk_tree_model_get_iter (GTK_TREE_MODEL (data), &iter, path);
gtk_tree_model_row_inserted (GTK_TREE_MODEL (data), path, &iter); gtk_tree_model_row_inserted (GTK_TREE_MODEL (data), path, &iter);
gtk_tree_path_free (path); gtk_tree_path_free (path);
@ -642,7 +642,7 @@ gtk_tree_model_sort_row_inserted (GtkTreeModel *s_model,
done: done:
if (free_s_path) if (free_s_path)
gtk_tree_path_free (s_path); gtk_tree_path_free (s_path);
return; return;
} }
@ -661,7 +661,7 @@ gtk_tree_model_sort_row_has_child_toggled (GtkTreeModel *s_model,
path = gtk_real_tree_model_sort_convert_child_path_to_path (tree_model_sort, s_path, FALSE); path = gtk_real_tree_model_sort_convert_child_path_to_path (tree_model_sort, s_path, FALSE);
if (path == NULL) if (path == NULL)
return; return;
gtk_tree_model_get_iter (GTK_TREE_MODEL (data), &iter, path); gtk_tree_model_get_iter (GTK_TREE_MODEL (data), &iter, path);
gtk_tree_model_row_has_child_toggled (GTK_TREE_MODEL (data), path, &iter); gtk_tree_model_row_has_child_toggled (GTK_TREE_MODEL (data), path, &iter);
@ -681,7 +681,7 @@ gtk_tree_model_sort_row_deleted (GtkTreeModel *s_model,
GtkTreeIter iter; GtkTreeIter iter;
gint offset; gint offset;
gint i; gint i;
g_return_if_fail (s_path != NULL); g_return_if_fail (s_path != NULL);
#ifdef VERBOSE #ifdef VERBOSE
@ -722,7 +722,7 @@ gtk_tree_model_sort_row_deleted (GtkTreeModel *s_model,
break; break;
g_array_remove_index (level->array, i); g_array_remove_index (level->array, i);
/* update all offsets */ /* update all offsets */
for (i = 0; i < level->array->len; i++) for (i = 0; i < level->array->len; i++)
{ {
@ -750,7 +750,7 @@ gtk_tree_model_sort_rows_reordered (GtkTreeModel *s_model,
int i, j; int i, j;
GtkTreePath *path; GtkTreePath *path;
GtkTreeModelSort *tree_model_sort = GTK_TREE_MODEL_SORT (data); GtkTreeModelSort *tree_model_sort = GTK_TREE_MODEL_SORT (data);
g_return_if_fail (new_order != NULL); g_return_if_fail (new_order != NULL);
if (s_path == NULL || gtk_tree_path_get_indices (s_path) == NULL) if (s_path == NULL || gtk_tree_path_get_indices (s_path) == NULL)
@ -802,11 +802,11 @@ gtk_tree_model_sort_rows_reordered (GtkTreeModel *s_model,
if (tree_model_sort->sort_column_id == -1 && if (tree_model_sort->sort_column_id == -1 &&
tree_model_sort->default_sort_func == (GtkTreeIterCompareFunc) 0x1) tree_model_sort->default_sort_func == (GtkTreeIterCompareFunc) 0x1)
{ {
gtk_tree_model_sort_sort_level (tree_model_sort, level, gtk_tree_model_sort_sort_level (tree_model_sort, level,
FALSE, FALSE); FALSE, FALSE);
gtk_tree_model_sort_increment_stamp (tree_model_sort); gtk_tree_model_sort_increment_stamp (tree_model_sort);
if (gtk_tree_path_get_depth (path)) if (gtk_tree_path_get_depth (path))
{ {
gtk_tree_model_get_iter (GTK_TREE_MODEL (tree_model_sort), gtk_tree_model_get_iter (GTK_TREE_MODEL (tree_model_sort),
@ -1005,7 +1005,7 @@ gtk_tree_model_sort_iter_children (GtkTreeModel *tree_model,
iter->user_data = ((SortElt *)parent->user_data2)->children; iter->user_data = ((SortElt *)parent->user_data2)->children;
iter->user_data2 = ((SortLevel *)iter->user_data)->array->data; iter->user_data2 = ((SortLevel *)iter->user_data)->array->data;
} }
return TRUE; return TRUE;
} }
@ -1129,7 +1129,7 @@ gtk_tree_model_sort_ref_node (GtkTreeModel *tree_model,
parent_elt->zero_ref_count--; parent_elt->zero_ref_count--;
else else
tree_model_sort->zero_ref_count--; tree_model_sort->zero_ref_count--;
if (parent_level) if (parent_level)
{ {
parent_elt = parent_level->parent_elt; parent_elt = parent_level->parent_elt;
@ -1168,7 +1168,7 @@ gtk_tree_model_sort_unref_node (GtkTreeModel *tree_model,
while (parent_level) while (parent_level)
{ {
parent_elt->zero_ref_count++; parent_elt->zero_ref_count++;
parent_elt = parent_level->parent_elt; parent_elt = parent_level->parent_elt;
parent_level = parent_level->parent_level; parent_level = parent_level->parent_level;
} }
@ -1203,13 +1203,13 @@ gtk_tree_model_sort_set_sort_column_id (GtkTreeSortable *sortable,
GtkSortType order) GtkSortType order)
{ {
GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *)sortable; GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *)sortable;
g_return_if_fail (GTK_IS_TREE_MODEL_SORT (sortable)); g_return_if_fail (GTK_IS_TREE_MODEL_SORT (sortable));
if (sort_column_id != GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID) if (sort_column_id != GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID)
{ {
GtkTreeDataSortHeader *header = NULL; GtkTreeDataSortHeader *header = NULL;
header = _gtk_tree_data_list_get_header (tree_model_sort->sort_list, header = _gtk_tree_data_list_get_header (tree_model_sort->sort_list,
sort_column_id); sort_column_id);
@ -1255,7 +1255,7 @@ gtk_tree_model_sort_set_sort_func (GtkTreeSortable *sortable,
for (list = tree_model_sort->sort_list; list; list = list->next) for (list = tree_model_sort->sort_list; list; list = list->next)
{ {
header = (GtkTreeDataSortHeader *) list->data; header = (GtkTreeDataSortHeader *) list->data;
if (header->sort_column_id == sort_column_id) if (header->sort_column_id == sort_column_id)
break; break;
} }
@ -1283,9 +1283,9 @@ gtk_tree_model_sort_set_default_sort_func (GtkTreeSortable *sortable,
GtkDestroyNotify destroy) GtkDestroyNotify destroy)
{ {
GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *)sortable; GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *)sortable;
g_return_if_fail (GTK_IS_TREE_MODEL_SORT (sortable)); g_return_if_fail (GTK_IS_TREE_MODEL_SORT (sortable));
if (tree_model_sort->default_sort_destroy) if (tree_model_sort->default_sort_destroy)
(* tree_model_sort->default_sort_destroy) (tree_model_sort->default_sort_data); (* tree_model_sort->default_sort_destroy) (tree_model_sort->default_sort_data);
@ -1393,12 +1393,12 @@ gtk_tree_model_sort_sort_level (GtkTreeModelSort *tree_model_sort,
GtkTreeIter iter; GtkTreeIter iter;
GtkTreePath *path; GtkTreePath *path;
SortData data; SortData data;
g_return_if_fail (GTK_IS_TREE_MODEL_SORT (tree_model_sort)); g_return_if_fail (GTK_IS_TREE_MODEL_SORT (tree_model_sort));
g_return_if_fail (level != NULL); g_return_if_fail (level != NULL);
if (level->array->len < 1 && !((SortElt *)level->array->data)->children) if (level->array->len < 1 && !((SortElt *)level->array->data)->children)
return; return;
@ -1435,10 +1435,10 @@ gtk_tree_model_sort_sort_level (GtkTreeModelSort *tree_model_sort,
header = _gtk_tree_data_list_get_header (tree_model_sort->sort_list, header = _gtk_tree_data_list_get_header (tree_model_sort->sort_list,
tree_model_sort->sort_column_id); tree_model_sort->sort_column_id);
g_return_if_fail (header != NULL); g_return_if_fail (header != NULL);
g_return_if_fail (header->func != NULL); g_return_if_fail (header->func != NULL);
data.sort_func = header->func; data.sort_func = header->func;
data.sort_data = header->data; data.sort_data = header->data;
} }
@ -1476,7 +1476,7 @@ gtk_tree_model_sort_sort_level (GtkTreeModelSort *tree_model_sort,
for (i = 0; i < level->array->len; i++) for (i = 0; i < level->array->len; i++)
{ {
SortElt *elt; SortElt *elt;
elt = g_array_index (sort_array, SortTuple, i).elt; elt = g_array_index (sort_array, SortTuple, i).elt;
new_order[i] = g_array_index (sort_array, SortTuple, i).offset; new_order[i] = g_array_index (sort_array, SortTuple, i).offset;
@ -1528,9 +1528,9 @@ gtk_tree_model_sort_sort_level (GtkTreeModelSort *tree_model_sort,
TRUE, emit_reordered); TRUE, emit_reordered);
} }
} }
g_free (new_order); g_free (new_order);
} }
static void static void
gtk_tree_model_sort_sort (GtkTreeModelSort *tree_model_sort) gtk_tree_model_sort_sort (GtkTreeModelSort *tree_model_sort)
@ -1572,29 +1572,29 @@ gtk_tree_model_sort_level_find_insert (GtkTreeModelSort *tree_model_sort,
GtkTreeIterCompareFunc func; GtkTreeIterCompareFunc func;
gpointer data; gpointer data;
GtkTreePath *path; GtkTreePath *path;
{ {
GtkTreeDataSortHeader *header; GtkTreeDataSortHeader *header;
header = _gtk_tree_data_list_get_header (tree_model_sort->sort_list, header = _gtk_tree_data_list_get_header (tree_model_sort->sort_list,
tree_model_sort->sort_column_id); tree_model_sort->sort_column_id);
g_return_val_if_fail (header != NULL, 0); g_return_val_if_fail (header != NULL, 0);
g_return_val_if_fail (header->func != NULL, 0); g_return_val_if_fail (header->func != NULL, 0);
func = header->func; func = header->func;
data = header->data; data = header->data;
} }
for (middle = 0; middle < level->array->len; middle++) for (middle = 0; middle < level->array->len; middle++)
{ {
tmp_elt = &(g_array_index (level->array, SortElt, middle)); tmp_elt = &(g_array_index (level->array, SortElt, middle));
if (!skip_sort_elt && SORT_ELT (iter->user_data2) == tmp_elt) if (!skip_sort_elt && SORT_ELT (iter->user_data2) == tmp_elt)
continue; continue;
path = gtk_tree_model_sort_elt_get_path (level, tmp_elt); path = gtk_tree_model_sort_elt_get_path (level, tmp_elt);
gtk_tree_model_get_iter (tree_model_sort->child_model, gtk_tree_model_get_iter (tree_model_sort->child_model,
&tmp_iter, path); &tmp_iter, path);
@ -1606,11 +1606,11 @@ gtk_tree_model_sort_level_find_insert (GtkTreeModelSort *tree_model_sort,
else else
cmp = (* func) (GTK_TREE_MODEL (tree_model_sort->child_model), cmp = (* func) (GTK_TREE_MODEL (tree_model_sort->child_model),
iter, &tmp_iter, data); iter, &tmp_iter, data);
if (cmp > 0) if (cmp > 0)
break; break;
} }
return middle; return middle;
} }
@ -1621,12 +1621,12 @@ gtk_tree_model_sort_insert_value (GtkTreeModelSort *tree_model_sort,
GtkTreeIter *s_iter) GtkTreeIter *s_iter)
{ {
gint offset, index, i; gint offset, index, i;
SortElt elt; SortElt elt;
SortElt *tmp_elt; SortElt *tmp_elt;
offset = gtk_tree_path_get_indices (s_path)[gtk_tree_path_get_depth (s_path) - 1]; offset = gtk_tree_path_get_indices (s_path)[gtk_tree_path_get_depth (s_path) - 1];
if (GTK_TREE_MODEL_SORT_CACHE_CHILD_ITERS (tree_model_sort)) if (GTK_TREE_MODEL_SORT_CACHE_CHILD_ITERS (tree_model_sort))
elt.iter = *s_iter; elt.iter = *s_iter;
elt.offset = offset; elt.offset = offset;
@ -1662,7 +1662,7 @@ gtk_tree_model_sort_elt_get_path (SortLevel *level,
SortLevel *walker = level; SortLevel *walker = level;
SortElt *walker2 = elt; SortElt *walker2 = elt;
GtkTreePath *path; GtkTreePath *path;
g_return_val_if_fail (level != NULL, NULL); g_return_val_if_fail (level != NULL, NULL);
g_return_val_if_fail (elt != NULL, NULL); g_return_val_if_fail (elt != NULL, NULL);
@ -1671,7 +1671,7 @@ gtk_tree_model_sort_elt_get_path (SortLevel *level,
while (walker) while (walker)
{ {
gtk_tree_path_prepend_index (path, walker2->offset); gtk_tree_path_prepend_index (path, walker2->offset);
walker2 = walker->parent_elt; walker2 = walker->parent_elt;
walker = walker->parent_level; walker = walker->parent_level;
} }
@ -1711,7 +1711,8 @@ gtk_tree_model_sort_set_model (GtkTreeModelSort *tree_model_sort,
tree_model_sort->reordered_id); tree_model_sort->reordered_id);
/* reset our state */ /* reset our state */
gtk_tree_model_sort_free_level (tree_model_sort, tree_model_sort->root); if (tree_model_sort->root)
gtk_tree_model_sort_free_level (tree_model_sort, tree_model_sort->root);
tree_model_sort->root = NULL; tree_model_sort->root = NULL;
_gtk_tree_data_list_header_free (tree_model_sort->sort_list); _gtk_tree_data_list_header_free (tree_model_sort->sort_list);
tree_model_sort->sort_list = NULL; tree_model_sort->sort_list = NULL;
@ -1799,7 +1800,7 @@ gtk_real_tree_model_sort_convert_child_path_to_path (GtkTreeModelSort *tree_mode
if (tree_model_sort->root == NULL && build_levels) if (tree_model_sort->root == NULL && build_levels)
gtk_tree_model_sort_build_level (tree_model_sort, NULL, NULL); gtk_tree_model_sort_build_level (tree_model_sort, NULL, NULL);
level = SORT_LEVEL (tree_model_sort->root); level = SORT_LEVEL (tree_model_sort->root);
for (i = 0; i < gtk_tree_path_get_depth (child_path); i++) for (i = 0; i < gtk_tree_path_get_depth (child_path); i++)
{ {
gint j; gint j;
@ -1939,10 +1940,10 @@ gtk_tree_model_sort_convert_path_to_child_path (GtkTreeModelSort *tree_model_sor
if (g_array_index (level->array, SortElt, sorted_indices[i]).children == 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])); gtk_tree_model_sort_build_level (tree_model_sort, level, &g_array_index (level->array, SortElt, sorted_indices[i]));
if (level == NULL) if (level == NULL)
gtk_tree_path_append_index (retval, g_array_index (level->array, SortElt, i).offset); gtk_tree_path_append_index (retval, g_array_index (level->array, SortElt, i).offset);
} }
return retval; return retval;
} }
@ -2101,7 +2102,7 @@ gtk_tree_model_sort_free_level (GtkTreeModelSort *tree_model_sort,
parent_elt->zero_ref_count--; parent_elt->zero_ref_count--;
else else
tree_model_sort->zero_ref_count--; tree_model_sort->zero_ref_count--;
if (parent_level) if (parent_level)
{ {
parent_elt = parent_level->parent_elt; parent_elt = parent_level->parent_elt;
@ -2110,18 +2111,18 @@ gtk_tree_model_sort_free_level (GtkTreeModelSort *tree_model_sort,
} }
while (parent_level); while (parent_level);
} }
#ifdef VERBOSE #ifdef VERBOSE
g_print ("-- freeing children\n"); g_print ("-- freeing children\n");
#endif #endif
for (i = 0; i < sort_level->array->len; i++) for (i = 0; i < sort_level->array->len; i++)
{ {
if (g_array_index (sort_level->array, SortElt, i).children) if (g_array_index (sort_level->array, SortElt, i).children)
gtk_tree_model_sort_free_level (tree_model_sort, gtk_tree_model_sort_free_level (tree_model_sort,
SORT_LEVEL(g_array_index (sort_level->array, SortElt, i).children)); SORT_LEVEL(g_array_index (sort_level->array, SortElt, i).children));
} }
if (sort_level->parent_elt) if (sort_level->parent_elt)
{ {
sort_level->parent_elt->children = NULL; sort_level->parent_elt->children = NULL;