Index: gtk/gtktextbuffer.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtktextbuffer.c,v
retrieving revision 1.85
diff -u -p -r1.85 gtktextbuffer.c
--- gtk/gtktextbuffer.c	18 Feb 2004 01:05:41 -0000	1.85
+++ gtk/gtktextbuffer.c	26 Feb 2004 15:55:48 -0000
@@ -2935,6 +2935,8 @@ pre_paste_prep (ClipboardRequest *reques
       if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end))
         *insert_point = start;
     }
+
+  gtk_text_buffer_move_mark_by_name (buffer, "insert", insert_point);
 }
 
 static void
Index: gtk/gtktextview.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtktextview.c,v
retrieving revision 1.240
diff -u -p -r1.240 gtktextview.c
--- gtk/gtktextview.c	16 Jan 2004 23:09:47 -0000	1.240
+++ gtk/gtktextview.c	26 Feb 2004 15:56:01 -0000
@@ -3920,6 +3942,7 @@ gtk_text_view_button_press_event (GtkWid
       else if (event->button == 2)
         {
           GtkTextIter iter;
+          GtkTextMark *mark;
 
           gtk_text_layout_get_iter_at_pixel (text_view->layout,
                                              &iter,
@@ -3927,9 +3950,21 @@ gtk_text_view_button_press_event (GtkWid
                                              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_widget_get_clipboard (widget, GDK_SELECTION_PRIMARY),
+                                           &iter,
+                                           text_view->editable);
+
+          mark = gtk_text_buffer_get_mark (get_buffer (text_view), "insert");
+          gtk_text_buffer_get_iter_at_mark (get_buffer (text_view),
+                                            &iter,
+                                            mark);
+
+          gtk_text_buffer_place_cursor (get_buffer (text_view), &iter);
+
+          DV(g_print (G_STRLOC": scrolling onscreen\n"));
+          gtk_text_view_scroll_mark_onscreen (text_view,
+                                              gtk_text_buffer_get_mark (get_buffer (text_view),
+                                                                        "insert"));
           return TRUE;
         }
       else if (event->button == 3)
