diff options
-rw-r--r-- | libempathy-gtk/empathy-chat.c | 2 | ||||
-rw-r--r-- | libempathy-gtk/empathy-contact-menu.c | 2 | ||||
-rw-r--r-- | libempathy-gtk/empathy-log-window.c | 2 | ||||
-rw-r--r-- | libempathy/empathy-log-manager.c | 49 | ||||
-rw-r--r-- | 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 31b676edb..0bfad9536 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 8a1f451d9..ab9ba721f 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 6020630d6..5f704a3be 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 aa70b49da..f3d17c248 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 4aec816c6..bad014000 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, |