[devhelp/wip/book-manager-singleton: 3/3] BookManager: add get_singleton() and free_singleton()
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [devhelp/wip/book-manager-singleton: 3/3] BookManager: add get_singleton() and free_singleton()
- Date: Mon, 1 May 2017 12:44:50 +0000 (UTC)
commit a6f1df27c69382db42ca65d9e80d4b09c0958b0d
Author: Sébastien Wilmet <swilmet gnome org>
Date: Mon May 1 14:26:34 2017 +0200
BookManager: add get_singleton() and free_singleton()
The implementation is like in DhSettings.
It makes sense to make DhBookManager a singleton, because it's the
top-level class containing the data. And we want to load the data just
once, and access the same data everywhere. There is no need to create
several DhBookManager instances.
Currently a lot of classes take a DhBookManager reference, either with a
construct-only property or a set_book_manager() function. So it'll be
possible to simplify the code, by just calling
dh_book_manager_get_singleton() where we need it.
docs/reference/devhelp-sections.txt | 1 +
src/dh-book-manager.c | 32 ++++++++++++++++++++++++++++----
src/dh-book-manager.h | 4 ++++
3 files changed, 33 insertions(+), 4 deletions(-)
---
diff --git a/docs/reference/devhelp-sections.txt b/docs/reference/devhelp-sections.txt
index 5bdd307..11537d9 100644
--- a/docs/reference/devhelp-sections.txt
+++ b/docs/reference/devhelp-sections.txt
@@ -97,6 +97,7 @@ dh_book_get_type
<TITLE>DhBookManager</TITLE>
DhBookManager
dh_book_manager_new
+dh_book_manager_get_singleton
dh_book_manager_populate
dh_book_manager_get_books
dh_book_manager_get_group_by_language
diff --git a/src/dh-book-manager.c b/src/dh-book-manager.c
index babff68..2d5768f 100644
--- a/src/dh-book-manager.c
+++ b/src/dh-book-manager.c
@@ -68,6 +68,8 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
+static DhBookManager *singleton = NULL;
+
G_DEFINE_TYPE_WITH_PRIVATE (DhBookManager, dh_book_manager, G_TYPE_OBJECT);
static void book_manager_add_from_filepath (DhBookManager *book_manager,
@@ -134,14 +136,15 @@ dh_book_manager_dispose (GObject *object)
static void
dh_book_manager_finalize (GObject *object)
{
- DhBookManagerPrivate *priv;
-
- priv = dh_book_manager_get_instance_private (DH_BOOK_MANAGER (object));
+ DhBookManager *book_manager = DH_BOOK_MANAGER (object);
+ DhBookManagerPrivate *priv = dh_book_manager_get_instance_private (book_manager);
g_list_free_full (priv->languages, g_object_unref);
-
g_slist_free_full (priv->books_disabled, g_free);
+ if (singleton == book_manager)
+ singleton = NULL;
+
G_OBJECT_CLASS (dh_book_manager_parent_class)->finalize (object);
}
@@ -813,6 +816,27 @@ dh_book_manager_new (void)
}
/**
+ * dh_book_manager_get_singleton:
+ *
+ * Returns: (transfer none): the #DhBookManager singleton instance.
+ */
+DhBookManager *
+dh_book_manager_get_singleton (void)
+{
+ if (singleton == NULL)
+ singleton = g_object_new (DH_TYPE_BOOK_MANAGER, NULL);
+
+ return singleton;
+}
+
+void
+_dh_book_manager_free_singleton (void)
+{
+ if (singleton != NULL)
+ g_object_unref (singleton);
+}
+
+/**
* dh_book_manager_populate:
* @book_manager: a #DhBookManager.
*
diff --git a/src/dh-book-manager.h b/src/dh-book-manager.h
index 03a559f..dee9188 100644
--- a/src/dh-book-manager.h
+++ b/src/dh-book-manager.h
@@ -42,6 +42,7 @@ struct _DhBookManagerClass {
};
GType dh_book_manager_get_type (void) G_GNUC_CONST;
+DhBookManager *dh_book_manager_get_singleton (void);
DhBookManager *dh_book_manager_new (void);
GList *dh_book_manager_get_books (DhBookManager *book_manager);
gboolean dh_book_manager_get_group_by_language (DhBookManager *book_manager);
@@ -51,6 +52,9 @@ void dh_book_manager_set_group_by_language (DhBookManager *book_manage
G_DEPRECATED
void dh_book_manager_populate (DhBookManager *book_manager);
+G_GNUC_INTERNAL
+void _dh_book_manager_free_singleton (void);
+
G_END_DECLS
#endif /* DH_BOOK_MANAGER_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]