Don't scroll to insert after middle-click paste

Patch by Ignacio Casal Quinteiro, bug 612119.
This commit is contained in:
Matthias Clasen
2010-03-08 11:25:26 -05:00
parent 87f48634f4
commit d84a831423

View File

@ -109,6 +109,7 @@ struct _GtkTextViewPrivate
guint blink_time; /* time in msec the cursor has blinked since last user event */ guint blink_time; /* time in msec the cursor has blinked since last user event */
guint im_spot_idle; guint im_spot_idle;
gchar *im_module; gchar *im_module;
guint scroll_after_paste : 1;
}; };
@ -1290,6 +1291,9 @@ gtk_text_view_init (GtkTextView *text_view)
{ {
GtkWidget *widget = GTK_WIDGET (text_view); GtkWidget *widget = GTK_WIDGET (text_view);
GtkTargetList *target_list; GtkTargetList *target_list;
GtkTextViewPrivate *priv;
priv = GTK_TEXT_VIEW_GET_PRIVATE (text_view);
gtk_widget_set_can_focus (widget, TRUE); gtk_widget_set_can_focus (widget, TRUE);
@ -1305,6 +1309,8 @@ gtk_text_view_init (GtkTextView *text_view)
text_view->tabs = NULL; text_view->tabs = NULL;
text_view->editable = TRUE; text_view->editable = TRUE;
priv->scroll_after_paste = TRUE;
gtk_drag_dest_set (widget, 0, NULL, 0, gtk_drag_dest_set (widget, 0, NULL, 0,
GDK_ACTION_COPY | GDK_ACTION_MOVE); GDK_ACTION_COPY | GDK_ACTION_MOVE);
@ -4378,6 +4384,12 @@ gtk_text_view_button_press_event (GtkWidget *widget, GdkEventButton *event)
else if (event->button == 2) else if (event->button == 2)
{ {
GtkTextIter iter; 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;
gtk_text_layout_get_iter_at_pixel (text_view->layout, gtk_text_layout_get_iter_at_pixel (text_view->layout,
&iter, &iter,
@ -5811,8 +5823,17 @@ gtk_text_view_paste_done_handler (GtkTextBuffer *buffer,
gpointer data) gpointer data)
{ {
GtkTextView *text_view = data; GtkTextView *text_view = data;
DV(g_print (G_STRLOC": scrolling onscreen\n")); GtkTextViewPrivate *priv;
gtk_text_view_scroll_mark_onscreen (text_view, gtk_text_buffer_get_insert (buffer));
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;
} }
static void static void