mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-02 17:00:19 +00:00
Improve unsetting old buffer in gtk_text_view_set_buffer()
When unsetting the old buffer always set the buffer on the layout to NULL. More importantly, clear the pending scroll. (The scroll is handled in an idle, when not cleared an idle handler might touch the layout later on, possibly corrupting the BTree). Unref the buffer after removing the selection from the clipboard, not before. Patch merged from maemo-gtk.
This commit is contained in:
parent
7a3d98324d
commit
dc3fb714a0
@ -349,6 +349,7 @@ static GtkAdjustment* get_vadjustment (GtkTextView *text_view);
|
||||
static void gtk_text_view_do_popup (GtkTextView *text_view,
|
||||
GdkEventButton *event);
|
||||
|
||||
static void cancel_pending_scroll (GtkTextView *text_view);
|
||||
static void gtk_text_view_queue_scroll (GtkTextView *text_view,
|
||||
GtkTextMark *mark,
|
||||
gdouble within_margin,
|
||||
@ -1412,16 +1413,21 @@ gtk_text_view_set_buffer (GtkTextView *text_view,
|
||||
g_signal_handlers_disconnect_by_func (text_view->buffer,
|
||||
gtk_text_view_paste_done_handler,
|
||||
text_view);
|
||||
g_object_unref (text_view->buffer);
|
||||
text_view->dnd_mark = NULL;
|
||||
text_view->first_para_mark = NULL;
|
||||
|
||||
if (GTK_WIDGET_REALIZED (text_view))
|
||||
{
|
||||
GtkClipboard *clipboard = gtk_widget_get_clipboard (GTK_WIDGET (text_view),
|
||||
GDK_SELECTION_PRIMARY);
|
||||
gtk_text_buffer_remove_selection_clipboard (text_view->buffer, clipboard);
|
||||
}
|
||||
}
|
||||
|
||||
if (text_view->layout)
|
||||
gtk_text_layout_set_buffer (text_view->layout, NULL);
|
||||
|
||||
g_object_unref (text_view->buffer);
|
||||
text_view->dnd_mark = NULL;
|
||||
text_view->first_para_mark = NULL;
|
||||
cancel_pending_scroll (text_view);
|
||||
}
|
||||
|
||||
text_view->buffer = buffer;
|
||||
|
Loading…
Reference in New Issue
Block a user