[gtksourceview/wip/loader-saver] FileSaver: main-file boolean property



commit fe5bdf7cda6c79b28e07da9cd35f3efbe53e291d
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Wed Apr 2 21:07:17 2014 +0200

    FileSaver: main-file boolean property

 docs/reference/gtksourceview-3.0-sections.txt |    2 +
 gtksourceview/gtksourcefilesaver.c            |   94 +++++++++++++++++++++++++
 gtksourceview/gtksourcefilesaver.h            |    5 ++
 3 files changed, 101 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/gtksourceview-3.0-sections.txt b/docs/reference/gtksourceview-3.0-sections.txt
index 7e5e75f..cfedbe8 100644
--- a/docs/reference/gtksourceview-3.0-sections.txt
+++ b/docs/reference/gtksourceview-3.0-sections.txt
@@ -272,6 +272,8 @@ GtkSourceFileSaver
 gtk_source_file_saver_new
 gtk_source_file_saver_get_buffer
 gtk_source_file_saver_get_file
+gtk_source_file_saver_set_main_file
+gtk_source_file_saver_get_main_file
 gtk_source_file_saver_set_encoding
 gtk_source_file_saver_get_encoding
 gtk_source_file_saver_set_newline_type
diff --git a/gtksourceview/gtksourcefilesaver.c b/gtksourceview/gtksourcefilesaver.c
index 70e06c0..9155be8 100644
--- a/gtksourceview/gtksourcefilesaver.c
+++ b/gtksourceview/gtksourcefilesaver.c
@@ -25,6 +25,7 @@
 #include "gtksourcefilesaver.h"
 #include "gtksourcebufferinputstream.h"
 #include "gtksourceencoding.h"
+#include "gtksourcebuffer-private.h"
 #include "gtksourceview-typebuiltins.h"
 #include "gtksourceview-i18n.h"
 
@@ -59,6 +60,7 @@ enum
        PROP_0,
        PROP_BUFFER,
        PROP_FILE,
+       PROP_MAIN_FILE,
        PROP_ENCODING,
        PROP_NEWLINE_TYPE,
        PROP_COMPRESSION_TYPE,
@@ -110,6 +112,7 @@ struct _GtkSourceFileSaverPrivate
 
        GFileInfo *info;
 
+       guint main_file : 1;
        guint create_backup : 1;
        guint tried_mount : 1;
 };
@@ -142,6 +145,10 @@ gtk_source_file_saver_set_property (GObject      *object,
                        saver->priv->file = g_value_dup_object (value);
                        break;
 
+               case PROP_MAIN_FILE:
+                       gtk_source_file_saver_set_main_file (saver, g_value_get_boolean (value));
+                       break;
+
                case PROP_ENCODING:
                        gtk_source_file_saver_set_encoding (saver, g_value_get_boxed (value));
                        break;
@@ -182,6 +189,10 @@ gtk_source_file_saver_get_property (GObject    *object,
                        g_value_set_object (value, saver->priv->file);
                        break;
 
+               case PROP_MAIN_FILE:
+                       g_value_set_boolean (value, saver->priv->main_file);
+                       break;
+
                case PROP_ENCODING:
                        g_value_set_boxed (value, saver->priv->encoding);
                        break;
@@ -303,6 +314,24 @@ gtk_source_file_saver_class_init (GtkSourceFileSaverClass *klass)
                                                              G_PARAM_STATIC_STRINGS));
 
        /**
+        * GtkSourceFileSaver:main-file:
+        *
+        * Whether the #GtkSourceFileSaver:file is the main file of the
+        * #GtkSourceFileSaver:buffer.
+        *
+        * Since: 3.14
+        */
+       g_object_class_install_property (object_class,
+                                        PROP_MAIN_FILE,
+                                        g_param_spec_boolean ("main-file",
+                                                              _("Main file"),
+                                                              "",
+                                                              TRUE,
+                                                              G_PARAM_READWRITE |
+                                                              G_PARAM_CONSTRUCT |
+                                                              G_PARAM_STATIC_STRINGS));
+
+       /**
         * GtkSourceFileSaver:encoding:
         *
         * The file's encoding.
@@ -869,6 +898,51 @@ gtk_source_file_saver_get_file (GtkSourceFileSaver *saver)
 }
 
 /**
+ * gtk_source_file_saver_set_main_file:
+ * @saver: a #GtkSourceFileSaver.
+ * @main_file: whether the file is the main file of the buffer.
+ *
+ * Sets whether the #GtkSourceFileSaver:file is the main file of the
+ * #GtkSourceFileSaver:buffer. If so, the following buffer properties will be
+ * updated on a successful save: the file, the encoding, the newline type and
+ * the compression type.
+ *
+ * If @main_file is %FALSE, it means that you are saving the buffer to a
+ * secondary file, and therefore the buffer properties will not be affected.
+ *
+ * Since: 3.14
+ */
+void
+gtk_source_file_saver_set_main_file (GtkSourceFileSaver *saver,
+                                    gboolean            main_file)
+{
+       g_return_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver));
+
+       main_file = main_file != FALSE;
+
+       if (saver->priv->main_file != main_file)
+       {
+               saver->priv->main_file = main_file;
+               g_object_notify (G_OBJECT (saver), "main-file");
+       }
+}
+
+/**
+ * gtk_source_file_saver_get_main_file:
+ * @saver: a #GtkSourceFileSaver.
+ *
+ * Returns: whether the file is the main file of the buffer.
+ * Since: 3.14
+ */
+gboolean
+gtk_source_file_saver_get_main_file (GtkSourceFileSaver *saver)
+{
+       g_return_val_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver), TRUE);
+
+       return saver->priv->main_file;
+}
+
+/**
  * gtk_source_file_saver_set_encoding:
  * @saver: a #GtkSourceFileSaver.
  * @encoding: (allow-none): the new encoding, or %NULL for UTF-8.
@@ -1098,6 +1172,11 @@ gtk_source_file_saver_save_async (GtkSourceFileSaver     *saver,
  *
  * Finishes a file saving started with gtk_source_file_saver_save_async().
  *
+ * If the file has been saved successfully, and if the
+ * #GtkSourceFileSaver:main-file property is %TRUE, the following
+ * #GtkSourceBuffer properties will be updated: the file, the encoding, the
+ * newline type and the compression type.
+ *
  * Returns: whether the file was saved successfully.
  * Since: 3.14
  */
@@ -1114,6 +1193,21 @@ gtk_source_file_saver_save_finish (GtkSourceFileSaver  *saver,
 
        ok = g_task_propagate_boolean (G_TASK (result), error);
 
+       if (ok && saver->priv->main_file && saver->priv->source_buffer != NULL)
+       {
+               _gtk_source_buffer_set_file (saver->priv->source_buffer,
+                                            saver->priv->file);
+
+               _gtk_source_buffer_set_encoding (saver->priv->source_buffer,
+                                                saver->priv->encoding);
+
+               _gtk_source_buffer_set_newline_type (saver->priv->source_buffer,
+                                                    saver->priv->newline_type);
+
+               _gtk_source_buffer_set_compression_type (saver->priv->source_buffer,
+                                                        saver->priv->compression_type);
+       }
+
        reset (saver);
 
        return ok;
diff --git a/gtksourceview/gtksourcefilesaver.h b/gtksourceview/gtksourcefilesaver.h
index d2e988d..fbb5d27 100644
--- a/gtksourceview/gtksourcefilesaver.h
+++ b/gtksourceview/gtksourcefilesaver.h
@@ -62,6 +62,11 @@ GtkSourceBuffer              *gtk_source_file_saver_get_buffer       (GtkSourceFileSaver   
    *sa
 
 GFile                  *gtk_source_file_saver_get_file         (GtkSourceFileSaver       *saver);
 
+void                    gtk_source_file_saver_set_main_file    (GtkSourceFileSaver       *saver,
+                                                                gboolean                  main_file);
+
+gboolean                gtk_source_file_saver_get_main_file    (GtkSourceFileSaver       *saver);
+
 void                    gtk_source_file_saver_set_encoding     (GtkSourceFileSaver       *saver,
                                                                 const GtkSourceEncoding  *encoding);
 


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