Replace broken, overly clever implementation with one that works.

Sat Oct 23 16:07:46 2004  Søren Sandmann  <sandmann@redhat.com>

	* gtk/gtksequence.c (_gtk_sequence_swap): Replace broken, overly
	clever implementation with one that works.

	* gtk/gtkliststore.c (gtk_list_store_swap): emit "rows_reordered"
	instead of "changed" twice.

	Bug 153479
This commit is contained in:
Søren Sandmann
2004-10-23 20:10:40 +00:00
committed by Søren Sandmann Pedersen
parent 8ebef872f3
commit 38df3fec77
6 changed files with 107 additions and 48 deletions

View File

@ -1070,21 +1070,35 @@ void
_gtk_sequence_swap (GtkSequencePtr a,
GtkSequencePtr b)
{
GtkSequenceNode temp;
gpointer temp_data;
GtkSequenceNode *leftmost, *rightmost, *rightmost_next;
int a_pos, b_pos;
g_return_if_fail (!_gtk_sequence_ptr_is_end (a));
g_return_if_fail (!_gtk_sequence_ptr_is_end (b));
if (a == b)
return;
a_pos = _gtk_sequence_ptr_get_position (a);
b_pos = _gtk_sequence_ptr_get_position (b);
if (a_pos > b_pos)
{
leftmost = b;
rightmost = a;
}
else
{
leftmost = a;
rightmost = b;
}
rightmost_next = _gtk_sequence_node_next (rightmost);
/* Situation now: ..., leftmost, ......., rightmost, rightmost_next, ... */
/* swap contents of the nodes */
temp = *a;
*a = *b;
*b = temp;
/* swap data back */
temp_data = a->data;
a->data = b->data;
b->data = temp_data;
_gtk_sequence_move (rightmost, leftmost);
_gtk_sequence_move (leftmost, rightmost_next);
}
void