[devhelp/wip/gobjectify-language] GObjectify DhLanguage



commit 1c3a20203ce2df0bb9d2227d4d85cabb545faa18
Author: Corentin Noël <corentin elementary io>
Date:   Tue Nov 22 10:21:21 2016 +0100

    GObjectify DhLanguage
    
    For better GObject Introspection support.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=775261

 src/dh-book-manager.c |    4 +-
 src/dh-language.c     |   78 ++++++++++++++++++++++++++++++++++++++----------
 src/dh-language.h     |   42 ++++++++++++++++++++------
 3 files changed, 95 insertions(+), 29 deletions(-)
---
diff --git a/src/dh-book-manager.c b/src/dh-book-manager.c
index b10cc6b..796574d 100644
--- a/src/dh-book-manager.c
+++ b/src/dh-book-manager.c
@@ -118,7 +118,7 @@ dh_book_manager_finalize (GObject *object)
 
         priv = dh_book_manager_get_instance_private (DH_BOOK_MANAGER (object));
 
-        g_list_free_full (priv->languages, (GDestroyNotify)dh_language_free);
+        g_list_free_full (priv->languages, g_object_unref);
 
         g_slist_free_full (priv->books_disabled, g_free);
 
@@ -876,7 +876,7 @@ book_manager_dec_language (DhBookManager *book_manager,
 
         /* If language count reaches zero, remove from list */
         if (dh_language_dec_n_books_enabled (li->data)) {
-                dh_language_free (li->data);
+                g_object_unref (li->data);
                 priv->languages = g_list_delete_link (priv->languages, li);
 
                 /* Emit signal to notify others */
diff --git a/src/dh-language.c b/src/dh-language.c
index b2e0f8d..dfec449 100644
--- a/src/dh-language.c
+++ b/src/dh-language.c
@@ -20,24 +20,51 @@
 #include "dh-language.h"
 #include <string.h>
 
-struct _DhLanguage {
+typedef struct {
         /* Name of the language */
         gchar *name;
+
         /* Number of books enabled in the language */
         gint   n_books_enabled;
-};
+} DhLanguagePrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (DhLanguage, dh_language, G_TYPE_OBJECT)
+
+static void
+dh_language_finalize (GObject *object)
+{
+        DhLanguagePrivate *priv = dh_language_get_instance_private (DH_LANGUAGE (object));
+
+        g_free (priv->name);
+
+        G_OBJECT_CLASS (dh_language_parent_class)->finalize (object);
+}
+
+static void
+dh_language_class_init (DhLanguageClass *klass)
+{
+        GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+        object_class->finalize = dh_language_finalize;
+}
+
+static void
+dh_language_init (DhLanguage *language)
+{
+}
 
 /**
  * dh_language_free:
  * @language: a #DhLanguage object
  *
  * Free memory associated with the language.
+ *
+ * Deprecated: 3.24: Use g_object_unref() instead.
  */
 void
 dh_language_free (DhLanguage *language)
 {
-        g_free (language->name);
-        g_slice_free (DhLanguage, language);
+        g_object_unref (language);
 }
 
 /**
@@ -52,11 +79,14 @@ DhLanguage *
 dh_language_new (const gchar *name)
 {
         DhLanguage *language;
+        DhLanguagePrivate *priv;
 
         g_return_val_if_fail (name != NULL, NULL);
 
-        language = g_slice_new0 (DhLanguage);
-        language->name = g_strdup (name);
+        language = g_object_new (DH_TYPE_LANGUAGE, NULL);
+
+        priv = dh_language_get_instance_private (language);
+        priv->name = g_strdup (name);
 
         return language;
 }
@@ -72,13 +102,14 @@ dh_language_new (const gchar *name)
  * of @language_a is <, == or > than the name of @language_b
  */
 gint
-dh_language_compare (const DhLanguage *language_a,
-                     const DhLanguage *language_b)
+dh_language_compare (DhLanguage *language_a,
+                     DhLanguage *language_b)
 {
         g_return_val_if_fail (language_a != NULL, -1);
         g_return_val_if_fail (language_b != NULL, -1);
 
-        return strcmp (language_a->name, language_b->name);
+        return strcmp (dh_language_get_name (language_a),
+                       dh_language_get_name (language_b));
 }
 
 /**
@@ -92,13 +123,14 @@ dh_language_compare (const DhLanguage *language_a,
  * of @language_a is <, == or > than @language_name_b
  */
 gint
-dh_language_compare_by_name (const DhLanguage *language_a,
-                             const gchar      *language_name_b)
+dh_language_compare_by_name (DhLanguage  *language_a,
+                             const gchar *language_name_b)
 {
         g_return_val_if_fail (language_a != NULL, -1);
         g_return_val_if_fail (language_name_b != NULL, -1);
 
-        return strcmp (language_a->name, language_name_b);
+        return strcmp (dh_language_get_name (language_a),
+                       language_name_b);
 }
 
 /**
@@ -112,9 +144,12 @@ dh_language_compare_by_name (const DhLanguage *language_a,
 const gchar *
 dh_language_get_name (DhLanguage *language)
 {
+        DhLanguagePrivate *priv;
+
         g_return_val_if_fail (language != NULL, NULL);
 
-        return language->name;
+        priv = dh_language_get_instance_private (language);
+        return priv->name;
 }
 
 /**
@@ -128,9 +163,12 @@ dh_language_get_name (DhLanguage *language)
 gint
 dh_language_get_n_books_enabled (DhLanguage *language)
 {
+        DhLanguagePrivate *priv;
+
         g_return_val_if_fail (language != NULL, -1);
 
-        return language->n_books_enabled;
+        priv = dh_language_get_instance_private (language);
+        return priv->n_books_enabled;
 }
 
 /**
@@ -142,9 +180,12 @@ dh_language_get_n_books_enabled (DhLanguage *language)
 void
 dh_language_inc_n_books_enabled (DhLanguage *language)
 {
+        DhLanguagePrivate *priv;
+
         g_return_if_fail (language != NULL);
 
-        language->n_books_enabled++;
+        priv = dh_language_get_instance_private (language);
+        priv->n_books_enabled++;
 }
 
 /**
@@ -158,8 +199,11 @@ dh_language_inc_n_books_enabled (DhLanguage *language)
 gboolean
 dh_language_dec_n_books_enabled (DhLanguage *language)
 {
+        DhLanguagePrivate *priv;
+
         g_return_val_if_fail (language != NULL, FALSE);
 
-        language->n_books_enabled--;
-        return (language->n_books_enabled <= 0) ? TRUE : FALSE;
+        priv = dh_language_get_instance_private (language);
+        priv->n_books_enabled--;
+        return (priv->n_books_enabled <= 0) ? TRUE : FALSE;
 }
diff --git a/src/dh-language.h b/src/dh-language.h
index 2c65400..af1f615 100644
--- a/src/dh-language.h
+++ b/src/dh-language.h
@@ -21,17 +21,39 @@
 
 #include <glib-object.h>
 
+G_BEGIN_DECLS
+
+#define DH_TYPE_LANGUAGE                (dh_language_get_type ())
+#define DH_LANGUAGE(obj)                (G_TYPE_CHECK_INSTANCE_CAST ((obj), DH_TYPE_LANGUAGE, DhLanguage))
+#define DH_LANGUAGE_CLASS(klass)        (G_TYPE_CHECK_CLASS_CAST ((klass), DH_TYPE_LANGUAGE, 
DhLanguageClass))
+#define DH_IS_LANGUAGE(obj)             (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DH_TYPE_LANGUAGE))
+#define DH_IS_LANGUAGE_CLASS(klass)     (G_TYPE_CHECK_CLASS_TYPE ((klass), DH_TYPE_LANGUAGE))
+#define DH_LANGUAGE_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS ((obj), DH_TYPE_LANGUAGE, 
DhLanguageClass))
+
 typedef struct _DhLanguage DhLanguage;
+typedef struct _DhLanguageClass DhLanguageClass;
+
+struct _DhLanguage {
+        GObject parent_instance;
+};
+
+struct _DhLanguageClass {
+        GObjectClass parent_class;
+};
+
+GType        dh_language_get_type            (void) G_GNUC_CONST;
+DhLanguage  *dh_language_new                 (const gchar *name);
+G_DEPRECATED_FOR (g_object_unref)
+void         dh_language_free                (DhLanguage *language);
+const gchar *dh_language_get_name            (DhLanguage *language);
+gint         dh_language_compare             (DhLanguage *language_a,
+                                              DhLanguage *language_b);
+gint         dh_language_compare_by_name     (DhLanguage  *language_a,
+                                              const gchar *language_name_b);
+gint         dh_language_get_n_books_enabled (DhLanguage *language);
+void         dh_language_inc_n_books_enabled (DhLanguage *language);
+gboolean     dh_language_dec_n_books_enabled (DhLanguage *language);
 
-DhLanguage  *dh_language_new                 (const gchar      *name);
-void         dh_language_free                (DhLanguage       *language);
-const gchar *dh_language_get_name            (DhLanguage       *language);
-gint         dh_language_compare             (const DhLanguage *language_a,
-                                              const DhLanguage *language_b);
-gint         dh_language_compare_by_name     (const DhLanguage *language_a,
-                                              const gchar      *language_name_b);
-gint         dh_language_get_n_books_enabled (DhLanguage       *language);
-void         dh_language_inc_n_books_enabled (DhLanguage       *language);
-gboolean     dh_language_dec_n_books_enabled (DhLanguage       *language);
+G_END_DECLS
 
 #endif /* __DH_LANGUAGE_H__ */


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