diff --git a/goffice/canvas/goc-canvas.c b/goffice/canvas/goc-canvas.c
index 5d6c2fd..8f2931b 100644
--- a/goffice/canvas/goc-canvas.c
+++ b/goffice/canvas/goc-canvas.c
@@ -63,6 +63,8 @@ expose_cb (GocCanvas *canvas, GdkEventExpose *event, G_GNUC_UNUSED gpointer data
 	ay1 = ((double) event->area.y + event->area.height) / canvas->pixels_per_unit + canvas->scroll_y1;
 	if (x0 <= ax1 && x1 >= ax0 && y0 <= ay1 && y1 >= ay0) {
 		cairo_t *cr = gdk_cairo_create (event->window);
+		cairo_rectangle (cr, event->area.x, event->area.y, event->area.width, event->area.height);
+		cairo_clip (cr);
 		canvas->cur_event = (GdkEvent *) event;
 		goc_item_draw_region (GOC_ITEM (canvas->root), cr, ax0, ay0, ax1, ay1);
 		cairo_destroy (cr);
