diff options
author | Matthias Clasen <mclasen@redhat.com> | 2004-12-22 06:43:32 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2004-12-22 06:43:32 +0000 |
commit | 5ec1648473815ab4d09ab1151f22c55d59c1cc8c (patch) | |
tree | 795ce79004127304cc6cecf1ae5d7922911144af /gtk/gtkliststore.c | |
parent | 61978d359be07e101d302f9cd0975d2bb16b1563 (diff) | |
download | gtk+-5ec1648473815ab4d09ab1151f22c55d59c1cc8c.tar.gz |
Fix sorting of list stores. (#161886, Marcin Krzyzanowski)
2004-12-22 Matthias Clasen <mclasen@redhat.com>
Fix sorting of list stores. (#161886, Marcin Krzyzanowski)
* gtk/gtkliststore.c (generate_order): Generate the order the
way it is supposed to be, order[new_pos] == old_pos.
(gtk_list_store_reorder): Invert the order before using it.
* gtk/gtkiconview.c (gtk_icon_view_rows_reordered): Adapt to the
list store fix.
Diffstat (limited to 'gtk/gtkliststore.c')
-rw-r--r-- | gtk/gtkliststore.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/gtk/gtkliststore.c b/gtk/gtkliststore.c index 8ef1489a1a..f05a1f2f7c 100644 --- a/gtk/gtkliststore.c +++ b/gtk/gtkliststore.c @@ -1413,21 +1413,27 @@ gtk_list_store_reorder (GtkListStore *store, GtkTreePath *path; GHashTable *new_positions; GtkSequencePtr ptr; - + gint *order; + g_return_if_fail (GTK_IS_LIST_STORE (store)); g_return_if_fail (!GTK_LIST_STORE_IS_SORTED (store)); g_return_if_fail (new_order != NULL); + order = g_new (gint, _gtk_sequence_get_length (store->seq)); + for (i = 0; i < _gtk_sequence_get_length (store->seq); i++) + order[new_order[i]] = i; + new_positions = g_hash_table_new (g_direct_hash, g_direct_equal); ptr = _gtk_sequence_get_begin_ptr (store->seq); i = 0; while (!_gtk_sequence_ptr_is_end (ptr)) { - g_hash_table_insert (new_positions, ptr, GINT_TO_POINTER (new_order[i++])); + g_hash_table_insert (new_positions, ptr, GINT_TO_POINTER (order[i++])); ptr = _gtk_sequence_ptr_next (ptr); } + g_free (order); _gtk_sequence_sort (store->seq, gtk_list_store_reorder_func, new_positions); @@ -1470,7 +1476,7 @@ generate_order (GtkSequence *seq, while (!_gtk_sequence_ptr_is_end (ptr)) { int old_pos = GPOINTER_TO_INT (g_hash_table_lookup (old_positions, ptr)); - order[old_pos] = i++; + order[i++] = old_pos; ptr = _gtk_sequence_ptr_next (ptr); } |