diff -ur eel-2.8.2/eel/eel-background.c eel-2.8.2-bgzoom/eel/eel-background.c
--- eel-2.8.2/eel/eel-background.c	2003-02-11 07:30:15.000000000 +0000
+++ eel-2.8.2-bgzoom/eel/eel-background.c	2004-12-12 20:11:08.040066576 +0000
@@ -532,6 +532,7 @@
 	switch (background->details->image_placement) {
 	case EEL_BACKGROUND_TILED:
 	case EEL_BACKGROUND_SCALED:
+	case EEL_BACKGROUND_ZOOM:
 		return TRUE;
 	default:
 		g_assert_not_reached ();
@@ -608,6 +609,24 @@
 				}
 			}
 			break;
+		case EEL_BACKGROUND_ZOOM:
+			eel_gdk_scale_to_min_factor (background->details->image_width_unscaled,
+						     background->details->image_height_unscaled,
+						     dest_width, dest_height,
+						     &fit_width, &fit_height);
+
+			if (image_width != fit_width || image_height != fit_height) {
+				if (cur_scaled) {
+					reload_image = TRUE;
+				} else {
+					scaled_pixbuf = eel_gdk_pixbuf_scale_to_min (background->details->image, dest_width, dest_height);
+					g_object_unref (background->details->image);
+					background->details->image = scaled_pixbuf;
+					image_width = gdk_pixbuf_get_width (scaled_pixbuf);
+					image_height = gdk_pixbuf_get_height (scaled_pixbuf);
+				}
+			}
+			break;
 		}
 
 		if (reload_image) {
@@ -677,6 +696,7 @@
 		case EEL_BACKGROUND_CENTERED:
 		case EEL_BACKGROUND_SCALED:
 		case EEL_BACKGROUND_SCALED_ASPECT:
+		case EEL_BACKGROUND_ZOOM:
 			*pixmap_width = entire_width;
 			*pixmap_height = entire_height;
 		}
@@ -1157,6 +1177,7 @@
 		case EEL_BACKGROUND_CENTERED:
 		case EEL_BACKGROUND_SCALED:
 		case EEL_BACKGROUND_SCALED_ASPECT:
+		case EEL_BACKGROUND_ZOOM:
 			/* Since the image has already been scaled, all these cases
 			 * can be treated identically.
 			 */
diff -ur eel-2.8.2/eel/eel-background.h eel-2.8.2-bgzoom/eel/eel-background.h
--- eel-2.8.2/eel/eel-background.h	2002-11-21 14:19:19.000000000 +0000
+++ eel-2.8.2-bgzoom/eel/eel-background.h	2004-12-12 19:07:42.000000000 +0000
@@ -63,7 +63,8 @@
 	EEL_BACKGROUND_TILED = 0, /* zero makes this the default placement */
 	EEL_BACKGROUND_CENTERED,
 	EEL_BACKGROUND_SCALED,
-	EEL_BACKGROUND_SCALED_ASPECT
+	EEL_BACKGROUND_SCALED_ASPECT,
+	EEL_BACKGROUND_ZOOM
 } EelBackgroundImagePlacement;
 
 GtkType                     eel_background_get_type                         (void);
diff -ur eel-2.8.2/eel/eel-gdk-pixbuf-extensions.c eel-2.8.2-bgzoom/eel/eel-gdk-pixbuf-extensions.c
--- eel-2.8.2/eel/eel-gdk-pixbuf-extensions.c	2003-02-11 07:30:16.000000000 +0000
+++ eel-2.8.2-bgzoom/eel/eel-gdk-pixbuf-extensions.c	2004-12-12 20:31:28.520525344 +0000
@@ -404,6 +404,37 @@
 	}
 }
 
+double
+eel_gdk_scale_to_min_factor (int width, int height,
+			     int min_width, int min_height,
+			     int *scaled_width, int *scaled_height)
+{
+	double scale_factor;
+
+	scale_factor = MAX (min_width / (double) width, min_height / (double) height);
+
+	*scaled_width  = floor (width * scale_factor + .5);
+	*scaled_height = floor (height * scale_factor + .5);
+
+	return scale_factor;
+}
+
+/* Returns a scaled copy of pixbuf, preserving aspect ratio. The copy will
+ * be scaled as small as possible without going under the specified width and height.
+ */
+GdkPixbuf *
+eel_gdk_pixbuf_scale_to_min (GdkPixbuf *pixbuf, int min_width, int min_height)
+{
+	int scaled_width;
+	int scaled_height;
+
+	eel_gdk_scale_to_min_factor (gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf),
+				     min_width, min_height,
+				     &scaled_width, &scaled_height);
+
+	return gdk_pixbuf_scale_simple (pixbuf, scaled_width, scaled_height, GDK_INTERP_BILINEAR);	
+}
+
 /**
  * eel_gdk_pixbuf_is_valid:
  * @pixbuf: A GdkPixbuf
diff -ur eel-2.8.2/eel/eel-gdk-pixbuf-extensions.h eel-2.8.2-bgzoom/eel/eel-gdk-pixbuf-extensions.h
--- eel-2.8.2/eel/eel-gdk-pixbuf-extensions.h	2002-07-15 09:54:37.000000000 +0100
+++ eel-2.8.2-bgzoom/eel/eel-gdk-pixbuf-extensions.h	2004-12-12 20:31:17.481203576 +0000
@@ -71,6 +71,15 @@
 							       int                    max_height,
 							       int                   *scaled_width,
 							       int                   *scaled_height);
+GdkPixbuf *          eel_gdk_pixbuf_scale_to_min              (GdkPixbuf             *pixbuf,
+							       int                    min_width,
+							       int                    min_height);
+double              eel_gdk_scale_to_min_factor               (int                   width,
+                                                               int                   height,
+							       int                   min_width,
+							       int                   min_height,
+							       int                   *scaled_width,
+							       int                   *scaled_height);
 
 /* return average color values for each component (argb) */
 guint32              eel_gdk_pixbuf_average_value             (GdkPixbuf             *pixbuf);
