Filed as bug 157415 [1]: The old scroll position code just took the next best icon matching the scrolled window criterion, and didn't take into account that permutations of container->details->icons should lead to the same result to work correctly in manual layout. Proposed patch attached. [1] http://bugzilla.gnome.org/show_bug.cgi?id=157415 -- Christian Neumair <chris gnome-de org>
Index: libnautilus-private/nautilus-icon-container.c =================================================================== RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-icon-container.c,v retrieving revision 1.393 diff -u -p -r1.393 nautilus-icon-container.c --- libnautilus-private/nautilus-icon-container.c 12 Aug 2005 18:11:29 -0000 1.393 +++ libnautilus-private/nautilus-icon-container.c 25 Aug 2005 21:20:43 -0000 @@ -4635,10 +4642,11 @@ NautilusIconData * nautilus_icon_container_get_first_visible_icon (NautilusIconContainer *container) { GList *l; - NautilusIcon *icon; + NautilusIcon *icon, *best_icon; GtkAdjustment *vadj; double x, y; double x1, y1, x2, y2; + double best_y1; vadj = gtk_layout_get_vadjustment (GTK_LAYOUT (container)); @@ -4647,6 +4655,8 @@ nautilus_icon_container_get_first_visibl &x, &y); l = container->details->icons; + best_icon = NULL; + best_y1 = 0; while (l != NULL) { icon = l->data; @@ -4654,13 +4664,22 @@ nautilus_icon_container_get_first_visibl eel_canvas_item_get_bounds (EEL_CANVAS_ITEM (icon->item), &x1, &y1, &x2, &y2); if (y2 > y) { - return icon->data; + if (best_icon != NULL) { + if (best_y1 > y1) { + best_icon = icon; + best_y1 = y1; + } + } else { + best_icon = icon; + best_y1 = y1; + } } } l = l->next; } - return NULL; + + return best_icon ? best_icon->data : NULL; } /* puts the icon at the top of the screen */
Attachment:
signature.asc
Description: This is a digitally signed message part