From eba974e2a304815ebd8287d6696aaa9803a19bb2 Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Fri, 9 Jan 2009 10:06:05 +0000 Subject: [PATCH] Port EmpathyLogManager to the new singleton policy. svn path=/trunk/; revision=2115 --- libempathy-gtk/empathy-chat.c | 2 +- libempathy-gtk/empathy-contact-menu.c | 2 +- libempathy-gtk/empathy-log-window.c | 2 +- libempathy/empathy-log-manager.c | 49 +++++++++++++++++---------- libempathy/empathy-log-manager.h | 2 +- 5 files changed, 35 insertions(+), 22 deletions(-) diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index 31b676ed..0bfad953 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -1526,7 +1526,7 @@ empathy_chat_init (EmpathyChat *chat) EMPATHY_TYPE_CHAT, EmpathyChatPriv); chat->priv = priv; - priv->log_manager = empathy_log_manager_new (); + priv->log_manager = empathy_log_manager_dup_singleton (); priv->contacts_width = -1; priv->sent_messages = NULL; priv->sent_messages_index = -1; diff --git a/libempathy-gtk/empathy-contact-menu.c b/libempathy-gtk/empathy-contact-menu.c index 8a1f451d..ab9ba721 100644 --- a/libempathy-gtk/empathy-contact-menu.c +++ b/libempathy-gtk/empathy-contact-menu.c @@ -171,7 +171,7 @@ empathy_contact_log_menu_item_new (EmpathyContact *contact) g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); - manager = empathy_log_manager_new (); + manager = empathy_log_manager_dup_singleton (); have_log = empathy_log_manager_exists (manager, empathy_contact_get_account (contact), empathy_contact_get_id (contact), diff --git a/libempathy-gtk/empathy-log-window.c b/libempathy-gtk/empathy-log-window.c index 6020630d..5f704a3b 100644 --- a/libempathy-gtk/empathy-log-window.c +++ b/libempathy-gtk/empathy-log-window.c @@ -160,7 +160,7 @@ empathy_log_window_show (McAccount *account, } window = g_new0 (EmpathyLogWindow, 1); - window->log_manager = empathy_log_manager_new (); + window->log_manager = empathy_log_manager_dup_singleton (); filename = empathy_file_lookup ("empathy-log-window.glade", "libempathy-gtk"); diff --git a/libempathy/empathy-log-manager.c b/libempathy/empathy-log-manager.c index aa70b49d..f3d17c24 100644 --- a/libempathy/empathy-log-manager.c +++ b/libempathy/empathy-log-manager.c @@ -55,7 +55,6 @@ typedef struct { gchar *basedir; } EmpathyLogManagerPriv; -static void log_manager_finalize (GObject *object); static const gchar * log_manager_get_basedir (EmpathyLogManager *manager); static GList * log_manager_get_all_files (EmpathyLogManager *manager, const gchar *dir); @@ -83,15 +82,7 @@ static void log_manager_search_hit_free (EmpathyLogSe G_DEFINE_TYPE (EmpathyLogManager, empathy_log_manager, G_TYPE_OBJECT); -static void -empathy_log_manager_class_init (EmpathyLogManagerClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = log_manager_finalize; - - g_type_class_add_private (object_class, sizeof (EmpathyLogManagerPriv)); -} +static EmpathyLogManager * manager_singleton = NULL; static void empathy_log_manager_init (EmpathyLogManager *manager) @@ -112,19 +103,41 @@ log_manager_finalize (GObject *object) g_free (priv->basedir); } -EmpathyLogManager * -empathy_log_manager_new (void) +static GObject * +log_manager_constructor (GType type, + guint n_props, + GObjectConstructParam *props) { - static EmpathyLogManager *manager = NULL; + GObject *retval; - if (!manager) { - manager = g_object_new (EMPATHY_TYPE_LOG_MANAGER, NULL); - g_object_add_weak_pointer (G_OBJECT (manager), (gpointer) &manager); + if (manager_singleton) { + retval = g_object_ref (manager_singleton); } else { - g_object_ref (manager); + retval = G_OBJECT_CLASS (empathy_log_manager_parent_class)->constructor + (type, n_props, props); + g_object_add_weak_pointer (retval, (gpointer *) &retval); + + manager_singleton = EMPATHY_LOG_MANAGER (retval); } - return manager; + return retval; +} + +static void +empathy_log_manager_class_init (EmpathyLogManagerClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = log_manager_finalize; + object_class->constructor = log_manager_constructor; + + g_type_class_add_private (object_class, sizeof (EmpathyLogManagerPriv)); +} + +EmpathyLogManager * +empathy_log_manager_dup_singleton (void) +{ + return g_object_new (EMPATHY_TYPE_LOG_MANAGER, NULL); } void diff --git a/libempathy/empathy-log-manager.h b/libempathy/empathy-log-manager.h index 4aec816c..bad01400 100644 --- a/libempathy/empathy-log-manager.h +++ b/libempathy/empathy-log-manager.h @@ -61,7 +61,7 @@ struct _EmpathyLogSearchHit { }; GType empathy_log_manager_get_type (void) G_GNUC_CONST; -EmpathyLogManager *empathy_log_manager_new (void); +EmpathyLogManager *empathy_log_manager_dup_singleton (void); void empathy_log_manager_add_message (EmpathyLogManager *manager, const gchar *chat_id, gboolean chatroom, -- 2.39.2