[libgit2-glib] Port GgitDiffFormatEmailOptions to G_DECLARE_DERIVABLE_TYPE macro



commit 87b97749460802d7814b143797330858fd69efb0
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Wed Jul 22 17:46:58 2015 +0200

    Port GgitDiffFormatEmailOptions to G_DECLARE_DERIVABLE_TYPE macro

 libgit2-glib/ggit-autocleanup.h               |    1 -
 libgit2-glib/ggit-diff-format-email-options.c |  194 ++++++++++++++++++-------
 libgit2-glib/ggit-diff-format-email-options.h |   21 +---
 libgit2-glib/ggit-diff.h                      |    1 +
 libgit2-glib/ggit-types.h                     |    7 -
 5 files changed, 141 insertions(+), 83 deletions(-)
---
diff --git a/libgit2-glib/ggit-autocleanup.h b/libgit2-glib/ggit-autocleanup.h
index 5610a86..c6b2dcf 100644
--- a/libgit2-glib/ggit-autocleanup.h
+++ b/libgit2-glib/ggit-autocleanup.h
@@ -61,7 +61,6 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (GgitCred, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GgitCredPlaintext, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GgitCredSshInteractive, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GgitCredSshKeyFromAgent, g_object_unref)
-G_DEFINE_AUTOPTR_CLEANUP_FUNC (GgitDiffFormatEmailOptions, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GgitRemote, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (GgitRepository, g_object_unref)
 
diff --git a/libgit2-glib/ggit-diff-format-email-options.c b/libgit2-glib/ggit-diff-format-email-options.c
index 548a611..cabcad1 100644
--- a/libgit2-glib/ggit-diff-format-email-options.c
+++ b/libgit2-glib/ggit-diff-format-email-options.c
@@ -1,20 +1,44 @@
+/*
+ * ggit-diff_format_email-options.c
+ * This file is part of libgit2-glib
+ *
+ * Copyright (C) 2013 - Ignacio Casal Quinteiro
+ *
+ * libgit2-glib is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * libgit2-glib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with libgit2-glib. If not, see <http://www.gnu.org/licenses/>.
+ */
+
 #include "ggit-diff-format-email-options.h"
 #include "ggit-enum-types.h"
 #include "ggit-signature.h"
 #include "ggit-oid.h"
 
-#define GGIT_DIFF_FORMAT_EMAIL_OPTIONS_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), 
GGIT_TYPE_DIFF_FORMAT_EMAIL_OPTIONS, GgitDiffFormatEmailOptionsPrivate))
+/**
+ * GgitFormatEmailOptions:
+ *
+ * Represents the options used when formatting a diff for e-mail.
+ */
 
-struct _GgitDiffFormatEmailOptionsPrivate
+typedef struct _GgitDiffFormatEmailOptionsPrivate
 {
        git_diff_format_email_options options;
 
        GgitOId *id;
        gchar *summary;
        GgitSignature *author;
-};
+} GgitDiffFormatEmailOptionsPrivate;
 
-G_DEFINE_TYPE (GgitDiffFormatEmailOptions, ggit_diff_format_email_options, G_TYPE_OBJECT)
+G_DEFINE_TYPE_WITH_PRIVATE (GgitDiffFormatEmailOptions, ggit_diff_format_email_options, G_TYPE_OBJECT)
 
 enum
 {
@@ -30,17 +54,18 @@ enum
 static void
 ggit_diff_format_email_options_finalize (GObject *object)
 {
-       GgitDiffFormatEmailOptions *options;
+       GgitDiffFormatEmailOptions *options = GGIT_DIFF_FORMAT_EMAIL_OPTIONS (object);
+       GgitDiffFormatEmailOptionsPrivate *priv;
 
-       options = GGIT_DIFF_FORMAT_EMAIL_OPTIONS (object);
+       priv = ggit_diff_format_email_options_get_instance_private (options);
 
-       if (options->priv->id)
+       if (priv->id)
        {
-               ggit_oid_free (options->priv->id);
+               ggit_oid_free (priv->id);
        }
 
-       g_free (options->priv->summary);
-       g_clear_object (&options->priv->author);
+       g_free (priv->summary);
+       g_clear_object (&priv->author);
 
        G_OBJECT_CLASS (ggit_diff_format_email_options_parent_class)->finalize (object);
 }
@@ -51,27 +76,30 @@ ggit_diff_format_email_options_set_property (GObject      *object,
                                              const GValue *value,
                                              GParamSpec   *pspec)
 {
-       GgitDiffFormatEmailOptions *self = GGIT_DIFF_FORMAT_EMAIL_OPTIONS (object);
+       GgitDiffFormatEmailOptions *options = GGIT_DIFF_FORMAT_EMAIL_OPTIONS (object);
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
+       priv = ggit_diff_format_email_options_get_instance_private (options);
 
        switch (prop_id)
        {
        case PROP_FLAGS:
-               self->priv->options.flags = g_value_get_flags (value);
+               priv->options.flags = g_value_get_flags (value);
                break;
        case PROP_PATCH_NUMBER:
-               self->priv->options.patch_no = g_value_get_uint64 (value);
+               priv->options.patch_no = g_value_get_uint64 (value);
                break;
        case PROP_TOTAL_PATCHES:
-               self->priv->options.total_patches = g_value_get_uint64 (value);
+               priv->options.total_patches = g_value_get_uint64 (value);
                break;
        case PROP_ID:
-               ggit_diff_format_email_options_set_id (self, g_value_get_boxed (value));
+               ggit_diff_format_email_options_set_id (options, g_value_get_boxed (value));
                break;
        case PROP_SUMMARY:
-               ggit_diff_format_email_options_set_summary (self, g_value_get_string (value));
+               ggit_diff_format_email_options_set_summary (options, g_value_get_string (value));
                break;
        case PROP_AUTHOR:
-               ggit_diff_format_email_options_set_author (self, g_value_get_object (value));
+               ggit_diff_format_email_options_set_author (options, g_value_get_object (value));
                break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -85,27 +113,30 @@ ggit_diff_format_email_options_get_property (GObject    *object,
                                              GValue     *value,
                                              GParamSpec *pspec)
 {
-       GgitDiffFormatEmailOptions *self = GGIT_DIFF_FORMAT_EMAIL_OPTIONS (object);
+       GgitDiffFormatEmailOptions *options = GGIT_DIFF_FORMAT_EMAIL_OPTIONS (object);
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
+       priv = ggit_diff_format_email_options_get_instance_private (options);
 
        switch (prop_id)
        {
        case PROP_FLAGS:
-               g_value_set_flags (value, self->priv->options.flags);
+               g_value_set_flags (value, priv->options.flags);
                break;
        case PROP_PATCH_NUMBER:
-               g_value_set_uint64 (value, self->priv->options.patch_no);
+               g_value_set_uint64 (value, priv->options.patch_no);
                break;
        case PROP_TOTAL_PATCHES:
-               g_value_set_uint64 (value, self->priv->options.total_patches);
+               g_value_set_uint64 (value, priv->options.total_patches);
                break;
        case PROP_ID:
-               g_value_set_boxed (value, self->priv->id);
+               g_value_set_boxed (value, priv->id);
                break;
        case PROP_SUMMARY:
-               g_value_set_string (value, self->priv->summary);
+               g_value_set_string (value, priv->summary);
                break;
        case PROP_AUTHOR:
-               g_value_set_object (value, self->priv->author);
+               g_value_set_object (value, priv->author);
                break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -120,13 +151,9 @@ ggit_diff_format_email_options_class_init (GgitDiffFormatEmailOptionsClass *klas
        git_diff_format_email_options defopts = GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT;
 
        object_class->finalize = ggit_diff_format_email_options_finalize;
-
        object_class->get_property = ggit_diff_format_email_options_get_property;
        object_class->set_property = ggit_diff_format_email_options_set_property;
 
-
-       g_type_class_add_private (object_class, sizeof (GgitDiffFormatEmailOptionsPrivate));
-
        g_object_class_install_property (object_class,
                                         PROP_FLAGS,
                                         g_param_spec_flags ("flags",
@@ -188,11 +215,13 @@ ggit_diff_format_email_options_class_init (GgitDiffFormatEmailOptionsClass *klas
 }
 
 static void
-ggit_diff_format_email_options_init (GgitDiffFormatEmailOptions *self)
+ggit_diff_format_email_options_init (GgitDiffFormatEmailOptions *options)
 {
-       self->priv = GGIT_DIFF_FORMAT_EMAIL_OPTIONS_GET_PRIVATE (self);
+       GgitDiffFormatEmailOptionsPrivate *priv;
 
-       git_diff_format_email_init_options (&self->priv->options,
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       git_diff_format_email_init_options (&priv->options,
                                            GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION);
 }
 
@@ -215,7 +244,11 @@ _ggit_diff_format_email_options_get_diff_format_email_options (GgitDiffFormatEma
 {
        if (options != NULL)
        {
-               return &options->priv->options;
+               GgitDiffFormatEmailOptionsPrivate *priv;
+
+               priv = ggit_diff_format_email_options_get_instance_private (options);
+
+               return &priv->options;
        }
        else
        {
@@ -235,9 +268,13 @@ _ggit_diff_format_email_options_get_diff_format_email_options (GgitDiffFormatEma
 GgitDiffFormatEmailFlags
 ggit_diff_format_email_options_get_flags (GgitDiffFormatEmailOptions *options)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_val_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options), 0);
 
-       return (GgitDiffFormatEmailFlags)options->priv->options.flags;
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       return (GgitDiffFormatEmailFlags)priv->options.flags;
 }
 
 /**
@@ -252,9 +289,13 @@ void
 ggit_diff_format_email_options_set_flags (GgitDiffFormatEmailOptions *options,
                                           GgitDiffFormatEmailFlags    flags)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options));
 
-       options->priv->options.flags = (git_diff_format_email_flags_t)flags;
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       priv->options.flags = (git_diff_format_email_flags_t)flags;
        g_object_notify (G_OBJECT (options), "flags");
 }
 
@@ -270,9 +311,13 @@ ggit_diff_format_email_options_set_flags (GgitDiffFormatEmailOptions *options,
 gsize
 ggit_diff_format_email_options_get_patch_number (GgitDiffFormatEmailOptions *options)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_val_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options), 0);
 
-       return options->priv->options.patch_no;
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       return priv->options.patch_no;
 }
 
 /**
@@ -287,9 +332,13 @@ void
 ggit_diff_format_email_options_set_patch_number (GgitDiffFormatEmailOptions *options,
                                                  gsize                       number)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options));
 
-       options->priv->options.patch_no = number;
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       priv->options.patch_no = number;
        g_object_notify (G_OBJECT (options), "patch-number");
 }
 
@@ -305,9 +354,13 @@ ggit_diff_format_email_options_set_patch_number (GgitDiffFormatEmailOptions *opt
 gsize
 ggit_diff_format_email_options_get_total_patches (GgitDiffFormatEmailOptions *options)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_val_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options), 0);
 
-       return options->priv->options.total_patches;
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       return priv->options.total_patches;
 }
 
 /**
@@ -322,9 +375,13 @@ void
 ggit_diff_format_email_options_set_total_patches (GgitDiffFormatEmailOptions *options,
                                                   gsize                       patches)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options));
 
-       options->priv->options.total_patches = patches;
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       priv->options.total_patches = patches;
        g_object_notify (G_OBJECT (options), "total-patches");
 }
 
@@ -340,9 +397,13 @@ ggit_diff_format_email_options_set_total_patches (GgitDiffFormatEmailOptions *op
 GgitOId *
 ggit_diff_format_email_options_get_id (GgitDiffFormatEmailOptions *options)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_val_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options), NULL);
 
-       return options->priv->id;
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       return priv->id;
 }
 
 /**
@@ -357,19 +418,23 @@ void
 ggit_diff_format_email_options_set_id (GgitDiffFormatEmailOptions *options,
                                        GgitOId                    *id)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options));
 
-       if (options->priv->id)
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       if (priv->id)
        {
-               ggit_oid_free (options->priv->id);
-               options->priv->id = NULL;
-               options->priv->options.id = NULL;
+               ggit_oid_free (priv->id);
+               priv->id = NULL;
+               priv->options.id = NULL;
        }
 
        if (id != NULL)
        {
-               options->priv->id = ggit_oid_copy (id);
-               options->priv->options.id = _ggit_oid_get_oid (options->priv->id);
+               priv->id = ggit_oid_copy (id);
+               priv->options.id = _ggit_oid_get_oid (priv->id);
        }
 
        g_object_notify (G_OBJECT (options), "id");
@@ -387,9 +452,13 @@ ggit_diff_format_email_options_set_id (GgitDiffFormatEmailOptions *options,
 const gchar *
 ggit_diff_format_email_options_get_summary (GgitDiffFormatEmailOptions *options)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_val_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options), NULL);
 
-       return options->priv->summary;
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       return priv->summary;
 }
 
 /**
@@ -404,12 +473,16 @@ void
 ggit_diff_format_email_options_set_summary (GgitDiffFormatEmailOptions *options,
                                             const gchar                *summary)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options));
 
-       g_free (options->priv->summary);
-       options->priv->summary = g_strdup (summary);
+       priv = ggit_diff_format_email_options_get_instance_private (options);
 
-       options->priv->options.summary = options->priv->summary;
+       g_free (priv->summary);
+       priv->summary = g_strdup (summary);
+
+       priv->options.summary = priv->summary;
        g_object_notify (G_OBJECT (options), "summary");
 }
 
@@ -425,9 +498,13 @@ ggit_diff_format_email_options_set_summary (GgitDiffFormatEmailOptions *options,
 GgitSignature *
 ggit_diff_format_email_options_get_author (GgitDiffFormatEmailOptions *options)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_val_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options), NULL);
 
-       return options->priv->author;
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       return priv->author;
 }
 
 /**
@@ -442,22 +519,27 @@ void
 ggit_diff_format_email_options_set_author (GgitDiffFormatEmailOptions *options,
                                            GgitSignature              *author)
 {
+       GgitDiffFormatEmailOptionsPrivate *priv;
+
        g_return_if_fail (GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS (options));
        g_return_if_fail (author == NULL || GGIT_IS_SIGNATURE (author));
 
-       if (options->priv->author)
+       priv = ggit_diff_format_email_options_get_instance_private (options);
+
+       if (priv->author)
        {
-               g_object_unref (options->priv->author);
-               options->priv->author = NULL;
-               options->priv->options.author = NULL;
+               g_object_unref (priv->author);
+               priv->author = NULL;
+               priv->options.author = NULL;
        }
 
        if (author)
        {
-               options->priv->author = ggit_signature_copy (author);
-               options->priv->options.author = _ggit_native_get (author);
+               priv->author = ggit_signature_copy (author);
+               priv->options.author = _ggit_native_get (author);
        }
 
        g_object_notify (G_OBJECT (options), "author");
 }
 
+/* ex:set ts=8 noet: */
diff --git a/libgit2-glib/ggit-diff-format-email-options.h b/libgit2-glib/ggit-diff-format-email-options.h
index 72d6be9..731c860 100644
--- a/libgit2-glib/ggit-diff-format-email-options.h
+++ b/libgit2-glib/ggit-diff-format-email-options.h
@@ -29,31 +29,14 @@
 
 G_BEGIN_DECLS
 
-#define GGIT_TYPE_DIFF_FORMAT_EMAIL_OPTIONS            (ggit_diff_format_email_options_get_type ())
-#define GGIT_DIFF_FORMAT_EMAIL_OPTIONS(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GGIT_TYPE_DIFF_FORMAT_EMAIL_OPTIONS, GgitDiffFormatEmailOptions))
-#define GGIT_DIFF_FORMAT_EMAIL_OPTIONS_CONST(obj)      (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GGIT_TYPE_DIFF_FORMAT_EMAIL_OPTIONS, GgitDiffFormatEmailOptions const))
-#define GGIT_DIFF_FORMAT_EMAIL_OPTIONS_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), 
GGIT_TYPE_DIFF_FORMAT_EMAIL_OPTIONS, GgitDiffFormatEmailOptionsClass))
-#define GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GGIT_TYPE_DIFF_FORMAT_EMAIL_OPTIONS))
-#define GGIT_IS_DIFF_FORMAT_EMAIL_OPTIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), 
GGIT_TYPE_DIFF_FORMAT_EMAIL_OPTIONS))
-#define GGIT_DIFF_FORMAT_EMAIL_OPTIONS_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GGIT_TYPE_DIFF_FORMAT_EMAIL_OPTIONS, GgitDiffFormatEmailOptionsClass))
-
-typedef struct _GgitDiffFormatEmailOptionsClass        GgitDiffFormatEmailOptionsClass;
-typedef struct _GgitDiffFormatEmailOptionsPrivate      GgitDiffFormatEmailOptionsPrivate;
-
-struct _GgitDiffFormatEmailOptions
-{
-       GObject parent;
-
-       GgitDiffFormatEmailOptionsPrivate *priv;
-};
+#define GGIT_TYPE_DIFF_FORMAT_EMAIL_OPTIONS (ggit_diff_format_email_options_get_type ())
+G_DECLARE_DERIVABLE_TYPE (GgitDiffFormatEmailOptions, ggit_diff_format_email_options, GGIT, 
DIFF_FORMAT_EMAIL_OPTIONS, GObject)
 
 struct _GgitDiffFormatEmailOptionsClass
 {
        GObjectClass parent_class;
 };
 
-GType                  ggit_diff_format_email_options_get_type (void) G_GNUC_CONST;
-
 const git_diff_format_email_options *
               _ggit_diff_format_email_options_get_diff_format_email_options (
                                          GgitDiffFormatEmailOptions *options);
diff --git a/libgit2-glib/ggit-diff.h b/libgit2-glib/ggit-diff.h
index 2837a53..e2025c9 100644
--- a/libgit2-glib/ggit-diff.h
+++ b/libgit2-glib/ggit-diff.h
@@ -29,6 +29,7 @@
 #include "ggit-index.h"
 #include "ggit-diff-find-options.h"
 #include "ggit-diff-options.h"
+#include "ggit-diff-format-email-options.h"
 
 G_BEGIN_DECLS
 
diff --git a/libgit2-glib/ggit-types.h b/libgit2-glib/ggit-types.h
index 53fe25b..bcb7647 100644
--- a/libgit2-glib/ggit-types.h
+++ b/libgit2-glib/ggit-types.h
@@ -286,13 +286,6 @@ typedef struct _GgitBlameOptions GgitBlameOptions;
 typedef struct _GgitRevertOptions GgitRevertOptions;
 
 /**
- * GgitFormatEmailOptions:
- *
- * Represents the options used when formatting a diff for e-mail.
- */
-typedef struct _GgitDiffFormatEmailOptions GgitDiffFormatEmailOptions;
-
-/**
  * GgitBranchType:
  * @GGIT_BRANCH_LOCAL: specifies a local branch.
  * @GGIT_BRANCH_REMOTE: specifies a remote branch.


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