summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-icon-container.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2005-08-29 09:33:28 +0000
committerAlexander Larsson <alexl@src.gnome.org>2005-08-29 09:33:28 +0000
commit5d493dc03242c6078d299547ddb560131dd9acce (patch)
treee478da03cc6eb139352058282c8aabcc6fc6f585 /libnautilus-private/nautilus-icon-container.c
parenta10e3ad78897ad3bef9b8dab6f0f1df74facedca (diff)
downloadnautilus-5d493dc03242c6078d299547ddb560131dd9acce.tar.gz
Handle non-sorted-by-y icon containers (manual mode). #157415. Patch from
2005-08-29 Alexander Larsson <alexl@redhat.com> * libnautilus-private/nautilus-icon-container.c: (nautilus_icon_container_get_first_visible_icon): Handle non-sorted-by-y icon containers (manual mode). #157415. Patch from Christian Neumair <chris@gnome-de.org>
Diffstat (limited to 'libnautilus-private/nautilus-icon-container.c')
-rw-r--r--libnautilus-private/nautilus-icon-container.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/libnautilus-private/nautilus-icon-container.c b/libnautilus-private/nautilus-icon-container.c
index 4b68ee9a1..1eedafb37 100644
--- a/libnautilus-private/nautilus-icon-container.c
+++ b/libnautilus-private/nautilus-icon-container.c
@@ -4642,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));
@@ -4654,6 +4655,8 @@ nautilus_icon_container_get_first_visible_icon (NautilusIconContainer *container
&x, &y);
l = container->details->icons;
+ best_icon = NULL;
+ best_y1 = 0;
while (l != NULL) {
icon = l->data;
@@ -4661,13 +4664,22 @@ nautilus_icon_container_get_first_visible_icon (NautilusIconContainer *container
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 */