Blob Blame History Raw
--- a/eel/eel-canvas.c
+++ b/eel/eel-canvas.c
@@ -3213,11 +3213,19 @@ eel_canvas_draw (GtkWidget *widget, cair
                 return FALSE;
 
         bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (widget));
+
+	if (!gtk_cairo_should_draw_window (cr, bin_window))
+		return FALSE;
+
+	cairo_save (cr);
+
         gtk_cairo_transform_to_window (cr, widget, bin_window);
 
         region = eel_cairo_get_clip_region (cr);
-        if (region == NULL)
+        if (region == NULL) {
+		cairo_restore (cr);
                 return FALSE;
+	}
 
 #ifdef VERBOSE
 	g_print ("Draw\n");
@@ -3249,6 +3257,8 @@ eel_canvas_draw (GtkWidget *widget, cair
 	if (canvas->root->flags & EEL_CANVAS_ITEM_MAPPED)
 		EEL_CANVAS_ITEM_GET_CLASS (canvas->root)->draw (canvas->root, cr, region);
 
+	cairo_restore (cr);
+
 	/* Chain up to get exposes on child widgets */
         if (GTK_WIDGET_CLASS (canvas_parent_class)->draw)
                 GTK_WIDGET_CLASS (canvas_parent_class)->draw (widget, cr);