summaryrefslogtreecommitdiff
path: root/gtk/gtkliststore.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2004-12-22 06:43:32 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2004-12-22 06:43:32 +0000
commit5ec1648473815ab4d09ab1151f22c55d59c1cc8c (patch)
tree795ce79004127304cc6cecf1ae5d7922911144af /gtk/gtkliststore.c
parent61978d359be07e101d302f9cd0975d2bb16b1563 (diff)
downloadgtk+-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.c12
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);
}