[maemo-commits] [maemo-commits] r9083 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gtk
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Fri Jan 12 16:28:26 EET 2007
- Previous message: [maemo-commits] r9082 - in projects/haf/trunk/python: Lib debian
- Next message: [maemo-commits] r9084 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gtk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: kris Date: 2007-01-12 16:28:24 +0200 (Fri, 12 Jan 2007) New Revision: 9083 Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreemodelsort.c Log: 2007-01-12 Kristian Rietveld <kris at imendio.com> * gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_changed), (gtk_tree_model_sort_ref_node), (gtk_tree_model_sort_real_unref_node), (gtk_tree_model_sort_sort_level), (gtk_tree_model_sort_free_level), (gtk_tree_model_sort_clear_cache): port over ref counting fixes found in maemo-gtk-2-6 and upstream trunk (but not in upstream 2.10). Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-01-12 14:26:47 UTC (rev 9082) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-01-12 14:28:24 UTC (rev 9083) @@ -1,3 +1,12 @@ +2007-01-12 Kristian Rietveld <kris at imendio.com> + + * gtk/gtktreemodelsort.c (gtk_tree_model_sort_row_changed), + (gtk_tree_model_sort_ref_node), (gtk_tree_model_sort_real_unref_node), + (gtk_tree_model_sort_sort_level), (gtk_tree_model_sort_free_level), + (gtk_tree_model_sort_clear_cache): port over ref counting fixes + found in maemo-gtk-2-6 and upstream trunk (but not in upstream + 2.10). + 2007-01-12 Michael Natterer <mitch at imendio.com> * gtk/gtkentry.c (gtk_entry_button_press): don't add Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreemodelsort.c =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreemodelsort.c 2007-01-12 14:26:47 UTC (rev 9082) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreemodelsort.c 2007-01-12 14:28:24 UTC (rev 9083) @@ -441,12 +441,11 @@ } gtk_tree_model_get_iter (GTK_TREE_MODEL (data), &iter, path); + gtk_tree_model_sort_ref_node (GTK_TREE_MODEL (data), &iter); level = iter.user_data; elt = iter.user_data2; - level->ref_count++; - if (level->array->len < 2 || (tree_model_sort->sort_column_id == GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID && tree_model_sort->default_sort_func == NO_SORT_FUNC)) @@ -455,11 +454,10 @@ gtk_tree_path_free (start_s_path); gtk_tree_model_row_changed (GTK_TREE_MODEL (data), path, &iter); + gtk_tree_model_sort_unref_node (GTK_TREE_MODEL (data), &iter); gtk_tree_path_free (path); - level->ref_count--; - return; } @@ -565,11 +563,10 @@ g_free (new_order); } - level->ref_count--; - /* emit row_changed signal (at new location) */ 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_sort_unref_node (GTK_TREE_MODEL (data), &iter); gtk_tree_path_free (path); if (free_s_path) @@ -1195,20 +1192,16 @@ SortLevel *parent_level = level->parent_level; SortElt *parent_elt = level->parent_elt; /* We were at zero -- time to decrement the zero_ref_count val */ - do + while (parent_level) { - if (parent_elt) - parent_elt->zero_ref_count--; - else - tree_model_sort->zero_ref_count--; + parent_elt->zero_ref_count--; - if (parent_level) - { - parent_elt = parent_level->parent_elt; - parent_level = parent_level->parent_level; - } + parent_elt = parent_level->parent_elt; + parent_level = parent_level->parent_level; } - while (parent_level); + + if (tree_model_sort->root != level) + tree_model_sort->zero_ref_count--; } } @@ -1253,7 +1246,9 @@ parent_elt = parent_level->parent_elt; parent_level = parent_level->parent_level; } - tree_model_sort->zero_ref_count++; + + if (tree_model_sort->root != level) + tree_model_sort->zero_ref_count++; } } @@ -1504,6 +1499,7 @@ gboolean emit_reordered) { gint i; + gint ref_offset; GArray *sort_array; GArray *new_array; gint *new_order; @@ -1518,8 +1514,13 @@ if (level->array->len < 1 && !((SortElt *)level->array->data)->children) return; - level->ref_count++; + iter.stamp = tree_model_sort->stamp; + iter.user_data = level; + iter.user_data2 = &g_array_index (level->array, SortElt, 0); + gtk_tree_model_sort_ref_node (GTK_TREE_MODEL (tree_model_sort), &iter); + ref_offset = g_array_index (level->array, SortElt, 0).offset; + /* Set up data */ data.tree_model_sort = tree_model_sort; if (level->parent_elt) @@ -1642,7 +1643,22 @@ g_free (new_order); - level->ref_count--; + /* get the iter we referenced at the beginning of this function and + * unref it again + */ + iter.stamp = tree_model_sort->stamp; + iter.user_data = level; + + for (i = 0; i < level->array->len; i++) + { + if (g_array_index (level->array, SortElt, i).offset == ref_offset) + { + iter.user_data2 = &g_array_index (level->array, SortElt, i); + break; + } + } + + gtk_tree_model_sort_unref_node (GTK_TREE_MODEL (tree_model_sort), &iter); } static void @@ -2232,32 +2248,28 @@ g_assert (sort_level); + for (i = 0; i < sort_level->array->len; i++) + { + if (g_array_index (sort_level->array, SortElt, i).children) + gtk_tree_model_sort_free_level (tree_model_sort, + SORT_LEVEL(g_array_index (sort_level->array, SortElt, i).children)); + } + if (sort_level->ref_count == 0) { SortLevel *parent_level = sort_level->parent_level; SortElt *parent_elt = sort_level->parent_elt; - do + while (parent_level) { - if (parent_elt) - parent_elt->zero_ref_count--; - else - tree_model_sort->zero_ref_count--; + parent_elt->zero_ref_count--; - if (parent_level) - { - parent_elt = parent_level->parent_elt; - parent_level = parent_level->parent_level; - } + parent_elt = parent_level->parent_elt; + parent_level = parent_level->parent_level; } - while (parent_level); - } - for (i = 0; i < sort_level->array->len; i++) - { - if (g_array_index (sort_level->array, SortElt, i).children) - gtk_tree_model_sort_free_level (tree_model_sort, - SORT_LEVEL(g_array_index (sort_level->array, SortElt, i).children)); + if (sort_level != tree_model_sort->root) + tree_model_sort->zero_ref_count--; } if (sort_level->parent_elt) @@ -2349,7 +2361,7 @@ { g_return_if_fail (GTK_IS_TREE_MODEL_SORT (tree_model_sort)); - if (tree_model_sort->zero_ref_count) + if (tree_model_sort->zero_ref_count > 0) gtk_tree_model_sort_clear_cache_helper (tree_model_sort, (SortLevel *)tree_model_sort->root); }
- Previous message: [maemo-commits] r9082 - in projects/haf/trunk/python: Lib debian
- Next message: [maemo-commits] r9084 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gtk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]