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:
committed by
Søren Sandmann Pedersen
parent
8ebef872f3
commit
38df3fec77
@ -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
|
||||
|
||||
Reference in New Issue
Block a user