Index: sheet-view.c
===================================================================
--- sheet-view.c	(revision 15602)
+++ sheet-view.c	(working copy)
@@ -355,17 +355,42 @@
 		sc_make_cell_visible (control, col, row, couple_panes););
 }
 
+#include "sheet-control-gui-priv.h"
+#include "gnumeric-canvas.h"
+
 void
 sv_redraw_range	(SheetView *sv, GnmRange const *r)
 {
-	GnmRange tmp = *r;
+	GnmRange tmp, visible;
+	gboolean first = TRUE;
 
 	g_return_if_fail (IS_SHEET_VIEW (sv));
 	if (sv->sheet == NULL) /* beware initialization */
 		return;
-	sheet_range_bounding_box (sv->sheet, &tmp);
-	SHEET_VIEW_FOREACH_CONTROL (sv, control,
-		sc_redraw_range (control, &tmp););
+
+	/* HACK! */
+	SHEET_VIEW_FOREACH_CONTROL (sv, control, {
+		SheetControlGUI *scg;
+		if (!IS_SHEET_CONTROL_GUI (control))
+			continue;
+		scg = SHEET_CONTROL_GUI (control);
+		SCG_FOREACH_PANE (scg, pane, {
+			GnmRange vis;
+			vis.start = pane->gcanvas->first;
+			vis.end = pane->gcanvas->last_visible;
+			if (first) {
+				first = FALSE;
+				visible = vis;
+			} else
+				visible = range_union (&visible, &vis);
+		});
+	});
+
+	if (range_intersection (&tmp, r, &visible)) {
+		sheet_range_bounding_box (sv->sheet, &tmp);
+		SHEET_VIEW_FOREACH_CONTROL (sv, control,
+					    sc_redraw_range (control, &tmp););
+	}
 }
 
 void
