TextView: Don't access already disposed text mark
authorMarek Kasik <mkasik@redhat.com>
Tue, 17 Apr 2018 13:54:24 +0000 (15:54 +0200)
committerMarek Kasik <mkasik@redhat.com>
Tue, 17 Apr 2018 14:01:54 +0000 (16:01 +0200)
Instead of asking of TextMark for its buffer,
let's reference also the buffer in the SelectionData.

Closes #169

gtk/gtktextview.c

index b0d53652bec50f4c200094cb0887f6f3d526bad8..fbf80b6e8b38a9d74777b5c0fecd25428e6d429d 100644 (file)
@@ -6987,17 +6987,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);
 }
 
@@ -7277,6 +7280,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),