--- gtk+-2.20.0/gtk/gtktextview.c	2010-03-22 13:44:12.000000000 +0100
+++ gtk+2.0-2.20.0/gtk/gtktextview.c	2010-03-29 16:42:05.169179266 +0200
@@ -109,7 +109,6 @@
   guint blink_time;  /* time in msec the cursor has blinked since last user event */
   guint im_spot_idle;
   gchar *im_module;
-  guint scroll_after_paste : 1;
 };
 
 
@@ -1291,9 +1290,6 @@
 {
   GtkWidget *widget = GTK_WIDGET (text_view);
   GtkTargetList *target_list;
-  GtkTextViewPrivate *priv;
-
-  priv = GTK_TEXT_VIEW_GET_PRIVATE (text_view);
 
   gtk_widget_set_can_focus (widget, TRUE);
 
@@ -1309,8 +1305,6 @@
   text_view->tabs = NULL;
   text_view->editable = TRUE;
 
-  priv->scroll_after_paste = TRUE;
-
   gtk_drag_dest_set (widget, 0, NULL, 0,
                      GDK_ACTION_COPY | GDK_ACTION_MOVE);
 
@@ -4384,22 +4378,16 @@
       else if (event->button == 2)
         {
           GtkTextIter iter;
-          GtkTextViewPrivate *priv;
-
-          /* We do not want to scroll back to the insert iter when we paste
-             with the middle button */
-          priv = GTK_TEXT_VIEW_GET_PRIVATE (text_view);
-          priv->scroll_after_paste = FALSE;
-
+          gchar *str;
+      
+          str = gtk_clipboard_wait_for_text (gtk_widget_get_clipboard (widget, GDK_SELECTION_PRIMARY));
           gtk_text_layout_get_iter_at_pixel (text_view->layout,
                                              &iter,
                                              event->x + text_view->xoffset,
                                              event->y + text_view->yoffset);
-
-          gtk_text_buffer_paste_clipboard (get_buffer (text_view),
-					   gtk_widget_get_clipboard (widget, GDK_SELECTION_PRIMARY),
-					   &iter,
-					   text_view->editable);
+          gtk_text_buffer_place_cursor (get_buffer (text_view), &iter);
+          gtk_text_buffer_insert_at_cursor (get_buffer (text_view), str, -1);
+          g_free(str);
           return TRUE;
         }
       else if (event->button == 3)
@@ -5823,17 +5811,9 @@
                                   gpointer       data)
 {
   GtkTextView *text_view = data;
-  GtkTextViewPrivate *priv;
-
-  priv = GTK_TEXT_VIEW_GET_PRIVATE (text_view);
-
-  if (priv->scroll_after_paste)
-    {
-      DV(g_print (G_STRLOC": scrolling onscreen\n"));
-      gtk_text_view_scroll_mark_onscreen (text_view, gtk_text_buffer_get_insert (buffer));
-    }
 
-  priv->scroll_after_paste = TRUE;
+  DV(g_print (G_STRLOC": scrolling onscreen\n"));
+  gtk_text_view_scroll_mark_onscreen (text_view, gtk_text_buffer_get_insert (buffer));
 }
 
 static void
