summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Kasik <mkasik@redhat.com>2018-04-17 15:54:24 +0200
committerMarek Kasik <mkasik@redhat.com>2018-04-17 16:07:05 +0200
commit8da5111edd810f369711f2c7d3f3210ea87ec325 (patch)
tree3d04e6582e84cbfb3c2c1fdc376e251446f309b8
parent2e7ac262be15fb402c4103d28533c6c6d955bf65 (diff)
downloadgtk+-8da5111edd810f369711f2c7d3f3210ea87ec325.tar.gz
TextView: Don't access already disposed text mark
Instead of asking of TextMark for its buffer, let's reference also the buffer in the SelectionData. Closes #169
-rw-r--r--gtk/gtktextview.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 7bf1793db6..c6d555ff2b 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -7612,17 +7612,20 @@ typedef struct
SelectionGranularity granularity;
GtkTextMark *orig_start;
GtkTextMark *orig_end;
+ GtkTextBuffer *buffer;
} SelectionData;
static void
selection_data_free (SelectionData *data)
{
if (data->orig_start != NULL)
- gtk_text_buffer_delete_mark (gtk_text_mark_get_buffer (data->orig_start),
- data->orig_start);
+ gtk_text_buffer_delete_mark (data->buffer, data->orig_start);
+
if (data->orig_end != NULL)
- gtk_text_buffer_delete_mark (gtk_text_mark_get_buffer (data->orig_end),
- data->orig_end);
+ gtk_text_buffer_delete_mark (data->buffer, data->orig_end);
+
+ g_object_unref (data->buffer);
+
g_slice_free (SelectionData, data);
}
@@ -7903,6 +7906,7 @@ gtk_text_view_start_selection_drag (GtkTextView *text_view,
&orig_start, TRUE);
data->orig_end = gtk_text_buffer_create_mark (buffer, NULL,
&orig_end, TRUE);
+ data->buffer = g_object_ref (buffer);
gtk_text_view_check_cursor_blink (text_view);
g_object_set_qdata_full (G_OBJECT (priv->drag_gesture),