[gtksourceview/wip/loader-saver: 13/19] FileSaver: flags instead of boolean properties



commit abef1e692732decfd676b26bf1d0112b4fd92893
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Tue Jun 10 23:13:03 2014 +0200

    FileSaver: flags instead of boolean properties

 docs/reference/gtksourceview-3.0-sections.txt |    7 +-
 gtksourceview/gtksourcefilesaver.c            |  140 +++++++------------------
 gtksourceview/gtksourcefilesaver.h            |   34 ++++--
 3 files changed, 63 insertions(+), 118 deletions(-)
---
diff --git a/docs/reference/gtksourceview-3.0-sections.txt b/docs/reference/gtksourceview-3.0-sections.txt
index 74ac019..0a00f9d 100644
--- a/docs/reference/gtksourceview-3.0-sections.txt
+++ b/docs/reference/gtksourceview-3.0-sections.txt
@@ -292,6 +292,7 @@ gtk_source_file_loader_error_quark
 GtkSourceFileSaver
 GTK_SOURCE_FILE_SAVER_ERROR
 GtkSourceFileSaverError
+GtkSourceFileSaverFlags
 <SUBSECTION>
 gtk_source_file_saver_new
 gtk_source_file_saver_get_file
@@ -302,10 +303,8 @@ gtk_source_file_saver_set_newline_type
 gtk_source_file_saver_get_newline_type
 gtk_source_file_saver_set_compression_type
 gtk_source_file_saver_get_compression_type
-gtk_source_file_saver_set_create_backup
-gtk_source_file_saver_get_create_backup
-gtk_source_file_saver_set_ignore_invalid_chars
-gtk_source_file_saver_get_ignore_invalid_chars
+gtk_source_file_saver_set_flags
+gtk_source_file_saver_get_flags
 gtk_source_file_saver_save_async
 gtk_source_file_saver_save_finish
 <SUBSECTION Standard>
diff --git a/gtksourceview/gtksourcefilesaver.c b/gtksourceview/gtksourcefilesaver.c
index ae62da8..b983152 100644
--- a/gtksourceview/gtksourcefilesaver.c
+++ b/gtksourceview/gtksourcefilesaver.c
@@ -64,8 +64,7 @@ enum
        PROP_ENCODING,
        PROP_NEWLINE_TYPE,
        PROP_COMPRESSION_TYPE,
-       PROP_CREATE_BACKUP,
-       PROP_IGNORE_INVALID_CHARS
+       PROP_FLAGS
 };
 
 struct _GtkSourceFileSaverPrivate
@@ -81,6 +80,7 @@ struct _GtkSourceFileSaverPrivate
        const GtkSourceEncoding *encoding;
        GtkSourceNewlineType newline_type;
        GtkSourceCompressionType compression_type;
+       GtkSourceFileSaverFlags flags;
 
        GTask *task;
 
@@ -110,8 +110,6 @@ struct _GtkSourceFileSaverPrivate
 
        GFileInfo *info;
 
-       guint create_backup : 1;
-       guint ignore_invalid_chars : 1;
        guint tried_mount : 1;
 };
 
@@ -155,12 +153,8 @@ gtk_source_file_saver_set_property (GObject      *object,
                        gtk_source_file_saver_set_compression_type (saver, g_value_get_enum (value));
                        break;
 
-               case PROP_CREATE_BACKUP:
-                       gtk_source_file_saver_set_create_backup (saver, g_value_get_boolean (value));
-                       break;
-
-               case PROP_IGNORE_INVALID_CHARS:
-                       gtk_source_file_saver_set_ignore_invalid_chars (saver, g_value_get_boolean (value));
+               case PROP_FLAGS:
+                       gtk_source_file_saver_set_flags (saver, g_value_get_flags (value));
                        break;
 
                default:
@@ -199,12 +193,8 @@ gtk_source_file_saver_get_property (GObject    *object,
                        g_value_set_enum (value, saver->priv->compression_type);
                        break;
 
-               case PROP_CREATE_BACKUP:
-                       g_value_set_boolean (value, saver->priv->create_backup);
-                       break;
-
-               case PROP_IGNORE_INVALID_CHARS:
-                       g_value_set_boolean (value, saver->priv->ignore_invalid_chars);
+               case PROP_FLAGS:
+                       g_value_set_flags (value, saver->priv->flags);
                        break;
 
                default:
@@ -366,40 +356,22 @@ gtk_source_file_saver_class_init (GtkSourceFileSaverClass *klass)
                                                            G_PARAM_STATIC_STRINGS));
 
        /**
-        * GtkSourceFileSaver:create-backup:
-        *
-        * Create a backup before saving the file.
-        *
-        * Since: 3.14
-        */
-       g_object_class_install_property (object_class,
-                                        PROP_CREATE_BACKUP,
-                                        g_param_spec_boolean ("create-backup",
-                                                              _("Create backup"),
-                                                              "",
-                                                              FALSE,
-                                                              G_PARAM_READWRITE |
-                                                              G_PARAM_CONSTRUCT |
-                                                              G_PARAM_STATIC_STRINGS));
-
-       /**
-        * GtkSourceFileSaver:ignore-invalid-chars:
+        * GtkSourceFileSaver:flags:
         *
-        * Whether to ignore invalid characters. If this property is %FALSE and
-        * if the buffer contains invalid characters, an error will be returned
-        * when attempting to save the file.
+        * File saving flags.
         *
         * Since: 3.14
         */
        g_object_class_install_property (object_class,
-                                        PROP_IGNORE_INVALID_CHARS,
-                                        g_param_spec_boolean ("ignore-invalid-chars",
-                                                              _("Ignore invalid characters"),
-                                                              "",
-                                                              FALSE,
-                                                              G_PARAM_READWRITE |
-                                                              G_PARAM_CONSTRUCT |
-                                                              G_PARAM_STATIC_STRINGS));
+                                        PROP_FLAGS,
+                                        g_param_spec_flags ("flags",
+                                                            _("Flags"),
+                                                            "",
+                                                            GTK_SOURCE_TYPE_FILE_SAVER_FLAGS,
+                                                            GTK_SOURCE_FILE_SAVER_FLAGS_NONE,
+                                                            G_PARAM_READWRITE |
+                                                            G_PARAM_CONSTRUCT |
+                                                            G_PARAM_STATIC_STRINGS));
 }
 
 static void
@@ -776,14 +748,16 @@ replace_file_cb (GFile              *file,
 static void
 begin_write (GtkSourceFileSaver *saver)
 {
+       gboolean create_backup = (saver->priv->flags & GTK_SOURCE_FILE_SAVER_FLAGS_CREATE_BACKUP) != 0;
+
        DEBUG ({
               g_print ("Start replacing file contents\n");
-              g_print ("Make backup: %s\n", make_backup ? "yes" : "no");
+              g_print ("Make backup: %s\n", create_backup ? "yes" : "no");
        });
 
        g_file_replace_async (saver->priv->location,
                              NULL,
-                             saver->priv->create_backup,
+                             create_backup,
                              G_FILE_CREATE_NONE,
                              g_task_get_priority (saver->priv->task),
                              g_task_get_cancellable (saver->priv->task),
@@ -1113,79 +1087,39 @@ gtk_source_file_saver_get_compression_type (GtkSourceFileSaver *saver)
 }
 
 /**
- * gtk_source_file_saver_set_create_backup:
- * @saver: a #GtkSourceFileSaver.
- * @create_backup: whether to create a backup before saving the file.
- *
- * Since: 3.14
- */
-void
-gtk_source_file_saver_set_create_backup (GtkSourceFileSaver *saver,
-                                        gboolean            create_backup)
-{
-       g_return_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver));
-       g_return_if_fail (saver->priv->task == NULL);
-
-       create_backup = create_backup != FALSE;
-
-       if (saver->priv->create_backup != create_backup)
-       {
-               saver->priv->create_backup = create_backup;
-               g_object_notify (G_OBJECT (saver), "create-backup");
-       }
-}
-
-/**
- * gtk_source_file_saver_get_create_backup:
+ * gtk_source_file_saver_set_flags:
  * @saver: a #GtkSourceFileSaver.
- *
- * Returns: whether to create a backup before saving the file.
- * Since: 3.14
- */
-gboolean
-gtk_source_file_saver_get_create_backup (GtkSourceFileSaver *saver)
-{
-       g_return_val_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver), FALSE);
-
-       return saver->priv->create_backup;
-}
-
-/**
- * gtk_source_file_saver_set_ignore_invalid_chars:
- * @saver: a #GtkSourceFileSaver.
- * @ignore_invalid_chars: whether to ignore invalid characters.
+ * @flags: the new flags.
  *
  * Since: 3.14
  */
 void
-gtk_source_file_saver_set_ignore_invalid_chars (GtkSourceFileSaver *saver,
-                                               gboolean            ignore_invalid_chars)
+gtk_source_file_saver_set_flags (GtkSourceFileSaver      *saver,
+                                GtkSourceFileSaverFlags  flags)
 {
        g_return_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver));
        g_return_if_fail (saver->priv->task == NULL);
 
-       ignore_invalid_chars = ignore_invalid_chars != FALSE;
-
-       if (saver->priv->ignore_invalid_chars != ignore_invalid_chars)
+       if (saver->priv->flags != flags)
        {
-               saver->priv->ignore_invalid_chars = ignore_invalid_chars;
-               g_object_notify (G_OBJECT (saver), "ignore-invalid-chars");
+               saver->priv->flags = flags;
+               g_object_notify (G_OBJECT (saver), "flags");
        }
 }
 
 /**
- * gtk_source_file_saver_get_ignore_invalid_chars:
+ * gtk_source_file_saver_get_flags:
  * @saver: a #GtkSourceFileSaver.
  *
- * Returns: whether to ignore invalid characters.
+ * Returns: the flags.
  * Since: 3.14
  */
-gboolean
-gtk_source_file_saver_get_ignore_invalid_chars (GtkSourceFileSaver *saver)
+GtkSourceFileSaverFlags
+gtk_source_file_saver_get_flags (GtkSourceFileSaver *saver)
 {
-       g_return_val_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver), FALSE);
+       g_return_val_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver), GTK_SOURCE_FILE_SAVER_FLAGS_NONE);
 
-       return saver->priv->ignore_invalid_chars;
+       return saver->priv->flags;
 }
 
 /**
@@ -1216,6 +1150,7 @@ gtk_source_file_saver_save_async (GtkSourceFileSaver     *saver,
                                  gpointer                user_data)
 {
        GtkSourceBuffer *buffer;
+       gboolean check_invalid_chars;
        gboolean implicit_trailing_newline;
 
        g_return_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver));
@@ -1241,8 +1176,9 @@ gtk_source_file_saver_save_async (GtkSourceFileSaver     *saver,
        saver->priv->progress_cb = progress_callback;
        saver->priv->progress_cb_data = progress_callback_data;
 
-       if (!saver->priv->ignore_invalid_chars &&
-           _gtk_source_buffer_has_invalid_chars (buffer))
+       check_invalid_chars = (saver->priv->flags & GTK_SOURCE_FILE_SAVER_FLAGS_IGNORE_INVALID_CHARS) == 0;
+
+       if (check_invalid_chars && _gtk_source_buffer_has_invalid_chars (buffer))
        {
                g_task_return_new_error (saver->priv->task,
                                         GTK_SOURCE_FILE_SAVER_ERROR,
diff --git a/gtksourceview/gtksourcefilesaver.h b/gtksourceview/gtksourcefilesaver.h
index c5afb78..00b59e0 100644
--- a/gtksourceview/gtksourcefilesaver.h
+++ b/gtksourceview/gtksourcefilesaver.h
@@ -51,6 +51,7 @@ typedef struct _GtkSourceFileSaverPrivate GtkSourceFileSaverPrivate;
  *   modified.
  *
  * An error code used with the %GTK_SOURCE_FILE_SAVER_ERROR domain.
+ * Since: 3.14
  */
 typedef enum
 {
@@ -58,6 +59,24 @@ typedef enum
        GTK_SOURCE_FILE_SAVER_ERROR_EXTERNALLY_MODIFIED
 } GtkSourceFileSaverError;
 
+/**
+ * GtkSourceFileSaverFlags:
+ * @GTK_SOURCE_FILE_SAVER_FLAGS_NONE: No flags.
+ * @GTK_SOURCE_FILE_SAVER_FLAGS_IGNORE_INVALID_CHARS: Ignore invalid characters.
+ * @GTK_SOURCE_FILE_SAVER_FLAGS_IGNORE_MODIFICATION_TIME: Save file despite external modifications.
+ * @GTK_SOURCE_FILE_SAVER_FLAGS_CREATE_BACKUP: Create a backup before saving the file.
+ *
+ * Flags to define the behavior of a #GtkSourceFileSaver.
+ * Since: 3.14
+ */
+typedef enum
+{
+       GTK_SOURCE_FILE_SAVER_FLAGS_NONE                        = 0,
+       GTK_SOURCE_FILE_SAVER_FLAGS_IGNORE_INVALID_CHARS        = 1 << 0,
+       GTK_SOURCE_FILE_SAVER_FLAGS_IGNORE_MODIFICATION_TIME    = 1 << 1,
+       GTK_SOURCE_FILE_SAVER_FLAGS_CREATE_BACKUP               = 1 << 2
+} GtkSourceFileSaverFlags;
+
 struct _GtkSourceFileSaver
 {
        GObject object;
@@ -98,19 +117,10 @@ void                        gtk_source_file_saver_set_compression_type
 GtkSourceCompressionType gtk_source_file_saver_get_compression_type
                                                                (GtkSourceFileSaver       *saver);
 
-void                    gtk_source_file_saver_set_create_backup
-                                                               (GtkSourceFileSaver       *saver,
-                                                                gboolean                  create_backup);
-
-gboolean                gtk_source_file_saver_get_create_backup
-                                                               (GtkSourceFileSaver       *saver);
+void                    gtk_source_file_saver_set_flags        (GtkSourceFileSaver       *saver,
+                                                                GtkSourceFileSaverFlags   flags);
 
-void                    gtk_source_file_saver_set_ignore_invalid_chars
-                                                               (GtkSourceFileSaver       *saver,
-                                                                gboolean                  
ignore_invalid_chars);
-
-gboolean                gtk_source_file_saver_get_ignore_invalid_chars
-                                                               (GtkSourceFileSaver       *saver);
+GtkSourceFileSaverFlags         gtk_source_file_saver_get_flags        (GtkSourceFileSaver       *saver);
 
 void                    gtk_source_file_saver_save_async       (GtkSourceFileSaver       *saver,
                                                                 gint                      io_priority,


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