--- a/gtksourceview/gtksourcegutter.c
+++ b/gtksourceview/gtksourcegutter.c
@@ -89,6 +89,10 @@
 
 G_DEFINE_TYPE_WITH_PRIVATE (GtkSourceGutter, gtk_source_gutter, G_TYPE_OBJECT)
 
+static gboolean on_view_draw (GtkSourceView   *view,
+                              cairo_t         *cr,
+                              GtkSourceGutter *gutter);
+
 static gboolean on_view_motion_notify_event (GtkSourceView   *view,
                                              GdkEventMotion  *event,
                                              GtkSourceGutter *gutter);
@@ -286,6 +290,12 @@
 	gutter->priv->view = view;
 
 	g_signal_connect_object (view,
+				 "draw",
+				 G_CALLBACK (on_view_draw),
+				 gutter,
+				 G_CONNECT_AFTER);
+
+	g_signal_connect_object (view,
 				 "motion-notify-event",
 				 G_CALLBACK (on_view_motion_notify_event),
 				 gutter,
@@ -1217,10 +1227,10 @@
 	}
 }
 
-void
-gtk_source_gutter_draw (GtkSourceGutter *gutter,
-                        GtkSourceView   *view,
-                        cairo_t         *cr)
+static gboolean
+on_view_draw (GtkSourceView   *view,
+              cairo_t         *cr,
+              GtkSourceGutter *gutter)
 {
 	GdkRectangle clip;
 	GtkTextView *text_view;
@@ -1234,7 +1244,7 @@
 
 	if (!get_clip_rectangle (gutter, view, cr, &clip))
 	{
-		return;
+		return GDK_EVENT_PROPAGATE;
 	}
 
 	gutter->priv->is_drawing = TRUE;
@@ -1291,6 +1301,8 @@
 
 	g_array_free (renderer_widths, TRUE);
 	lines_info_free (info);
+
+	return GDK_EVENT_PROPAGATE;
 }
 
 static Renderer *
--- a/gtksourceview/gtksourcegutter-private.h
+++ b/gtksourceview/gtksourcegutter-private.h
@@ -37,6 +37,12 @@
 							 cairo_t         *cr);
 
 
+G_GNUC_INTERNAL
+void gtk_source_gutter_draw (GtkSourceGutter *gutter,
+                             GtkSourceView   *view,
+                             cairo_t         *cr);
+
+
 G_END_DECLS
 
 #endif /* __GTK_SOURCE_GUTTER_PRIVATE_H__ */
--- a/gtksourceview/gtksourceview.c
+++ b/gtksourceview/gtksourceview.c
@@ -2952,7 +2952,6 @@
 gtk_source_view_draw (GtkWidget *widget,
 		      cairo_t   *cr)
 {
-	GtkSourceView *view = GTK_SOURCE_VIEW (widget);
 	gboolean event_handled;
 
 #ifdef ENABLE_PROFILE
@@ -2971,16 +2970,6 @@
 
 	event_handled = GTK_WIDGET_CLASS (gtk_source_view_parent_class)->draw (widget, cr);
 
-	if (view->priv->left_gutter != NULL)
-	{
-		gtk_source_gutter_draw (view->priv->left_gutter, view, cr);
-	}
-
-	if (view->priv->right_gutter != NULL)
-	{
-		gtk_source_gutter_draw (view->priv->right_gutter, view, cr);
-	}
-
 	PROFILE ({
 		g_timer_stop (timer);
 		g_print ("    gtk_source_view_draw time: %g (sec * 1000)\n",
