Index: io-jpeg.c
===================================================================
--- io-jpeg.c	(revision 1028)
+++ io-jpeg.c	(working copy)
@@ -692,7 +692,7 @@
 			int rc;			
 			
 			/* start decompression */
-			cinfo->buffered_image = TRUE;
+			cinfo->buffered_image = FALSE;
 			rc = jpeg_start_decompress (cinfo);
 			cinfo->do_fancy_upsampling = FALSE;
 			cinfo->do_block_smoothing = FALSE;
@@ -701,6 +701,62 @@
 				continue;
 
 			context->did_prescan = TRUE;
+		} else if (!cinfo->buffered_image) {
+			/* we're decompressing so feed jpeg lib scanlines */
+			guchar *lines[4];
+			guchar **lptr;
+			guchar *rowptr;
+			gint   nlines, i;
+
+			/* keep going until we've done all scanlines */
+			while (cinfo->output_scanline < cinfo->output_height) {
+				lptr = lines;
+				rowptr = context->dptr;
+				for (i=0; i < cinfo->rec_outbuf_height; i++) {
+					*lptr++ = rowptr;
+					rowptr += context->pixbuf->rowstride;
+				}
+				
+				nlines = jpeg_read_scanlines (cinfo, lines,
+							      cinfo->rec_outbuf_height);
+				if (nlines == 0)
+					break;
+
+				switch (cinfo->out_color_space) {
+				    case JCS_GRAYSCALE:
+					    explode_gray_into_buf (cinfo, lines);
+					    break;
+				    case JCS_RGB:
+					    /* do nothing */
+					    break;
+				    case JCS_CMYK:
+					    convert_cmyk_to_rgb (cinfo, lines);
+					    break;
+				    default:
+					    if (error && *error == NULL) {
+						    g_set_error (error,
+								 GDK_PIXBUF_ERROR,
+								 GDK_PIXBUF_ERROR_UNKNOWN_TYPE,
+								 _("Unsupported JPEG color space (%s)"),
+								 colorspace_name (cinfo->out_color_space)); 
+					    }
+					    
+					    return FALSE;
+				}
+
+				context->dptr += nlines * context->pixbuf->rowstride;
+				
+				/* send updated signal */
+				(* context->updated_func) (context->pixbuf,
+							   0, 
+							   cinfo->output_scanline-1,
+							   cinfo->image_width, 
+							   nlines,
+							   context->user_data);
+			}
+
+			if (cinfo->output_scanline >= cinfo->output_height)
+				return TRUE;
 		} else {
 			/* we're decompressing so feed jpeg lib scanlines */
 			guchar *lines[4];
