[gtksourceview/wip/loader-saver] FileSaver: ensure the source_buffer != NULL



commit 9d51ef240ee241d01e09e733cb1a72ff576f36e7
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Fri Mar 28 18:32:13 2014 +0100

    FileSaver: ensure the source_buffer != NULL

 gtksourceview/gtksourcefilesaver.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/gtksourceview/gtksourcefilesaver.c b/gtksourceview/gtksourcefilesaver.c
index 6ecec17..05aa81c 100644
--- a/gtksourceview/gtksourcefilesaver.c
+++ b/gtksourceview/gtksourcefilesaver.c
@@ -741,10 +741,6 @@ replace_file_cb (GFile              *file,
                saver->priv->output_stream = G_OUTPUT_STREAM (output_stream);
        }
 
-       saver->priv->input_stream = _gtk_source_buffer_input_stream_new (GTK_TEXT_BUFFER 
(saver->priv->source_buffer),
-                                                                        saver->priv->newline_type,
-                                                                        
saver->priv->ensure_trailing_newline);
-
        buffer_stream = GTK_SOURCE_BUFFER_INPUT_STREAM (saver->priv->input_stream);
        saver->priv->total_size = _gtk_source_buffer_input_stream_get_total_size (buffer_stream);
 
@@ -874,6 +870,9 @@ gtk_source_file_saver_save_async (GtkSourceFileSaver     *saver,
 {
        g_return_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver));
        g_return_if_fail (saver->priv->task == NULL);
+       g_return_if_fail (saver->priv->source_buffer != NULL);
+
+       reset (saver);
 
        saver->priv->task = g_task_new (saver, cancellable, callback, user_data);
        g_task_set_priority (saver->priv->task, io_priority);
@@ -885,6 +884,14 @@ gtk_source_file_saver_save_async (GtkSourceFileSaver     *saver,
               g_print ("Start saving\n");
        });
 
+       /* The BufferInputStream has a strong reference to the source_buffer.
+        * We create the BufferInputStream here so we are sure that the
+        * source_buffer will not be destroyed during the file saving.
+        */
+       saver->priv->input_stream = _gtk_source_buffer_input_stream_new (GTK_TEXT_BUFFER 
(saver->priv->source_buffer),
+                                                                        saver->priv->newline_type,
+                                                                        
saver->priv->ensure_trailing_newline);
+
        begin_write (saver);
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]