File nautilus-130796-bad-icon-placement.diff of Package nautilus

--- nautilus/libnautilus-private/nautilus-icon-container.c	2006-02-23 21:16:32.000000000 -0600
+++ nautilus/libnautilus-private/nautilus-icon-container.c	2006-02-23 21:14:59.000000000 -0600
@@ -1135,19 +1135,19 @@ snap_position (NautilusIconContainer *co
 	int icon_width;
 	int icon_height;
 	ArtDRect icon_position;
-	
-	if (*x < DESKTOP_PAD_HORIZONTAL) {
-		*x = DESKTOP_PAD_HORIZONTAL;
-	}
-
-	if (*y < DESKTOP_PAD_VERTICAL) {
-		*y = DESKTOP_PAD_VERTICAL;
-	}
 
 	icon_position = nautilus_icon_canvas_item_get_icon_rectangle (icon->item);
 	icon_width = icon_position.x1 - icon_position.x0;
 	icon_height = icon_position.y1 - icon_position.y0;
-	
+
+	if (*x + icon_width / 2 < DESKTOP_PAD_HORIZONTAL + SNAP_SIZE_X) {
+		*x = DESKTOP_PAD_HORIZONTAL + SNAP_SIZE_X - icon_width / 2;
+	}
+
+	if (*y + icon_height < DESKTOP_PAD_VERTICAL + SNAP_SIZE_Y) {
+		*y = DESKTOP_PAD_VERTICAL + SNAP_SIZE_Y - icon_height;
+	}
+
 	center_x = *x + icon_width / 2;
 	*x = SNAP_NEAREST_HORIZONTAL (center_x) - (icon_width / 2);
 
@@ -1477,11 +1477,9 @@ lay_down_icons_tblr (NautilusIconContain
 				icon = p->data;
 				
 				icon_rect = nautilus_icon_canvas_item_get_icon_rectangle (icon->item);
-				icon_get_bounding_box (icon, 
-						       &x1, &y1, &x2, &y2);
 				
-				/* Start the icon in the first column */ 
-				x = DESKTOP_PAD_HORIZONTAL + SNAP_SIZE_X - ((x2 - x1) / 2);
+				/* Start the icon in the first column */
+				x = DESKTOP_PAD_HORIZONTAL + (SNAP_SIZE_X / 2) - ((icon_rect.x1 - icon_rect.x0) / 2);
 				y = DESKTOP_PAD_VERTICAL + SNAP_SIZE_Y - (icon_rect.y1 - icon_rect.y0);
 
 				find_empty_location (container,
@@ -5169,12 +5167,14 @@ finish_adding_new_icons (NautilusIconCon
 	no_position_icons = semi_position_icons = NULL;
 	for (p = new_icons; p != NULL; p = p->next) {
 		icon = p->data;
-		if (!assign_icon_position (container, icon)) {
+		if (assign_icon_position (container, icon)) {
+			if (!container->details->auto_layout && icon->has_lazy_position) {
+				semi_position_icons = g_list_prepend (semi_position_icons, icon);
+			}
+		} else {
 			no_position_icons = g_list_prepend (no_position_icons, icon);
-		} else if (!container->details->auto_layout &&
-			   icon->has_lazy_position) {
-			semi_position_icons = g_list_prepend (semi_position_icons, icon);
 		}
+
 		finish_adding_icon (container, icon);
 	}
 	g_list_free (new_icons);
@@ -5186,7 +5186,9 @@ finish_adding_new_icons (NautilusIconCon
 
 		semi_position_icons = g_list_reverse (semi_position_icons);
 
-		grid = placement_grid_new (container, TRUE);
+		/* This is currently only used on the desktop.
+		 * Thus, we pass FALSE for tight, like lay_down_icons_tblr */
+		grid = placement_grid_new (container, FALSE);
 
 		for (p = container->details->icons; p != NULL; p = p->next) {
 			icon = p->data;
openSUSE Build Service is sponsored by