From 650e90377f5cbd976ead1e1c3171ac69566fc9f4 Mon Sep 17 00:00:00 2001 From: Jonny Lamb Date: Sun, 6 Sep 2009 00:20:18 +0100 Subject: chatroom-manager: only parse xml file once the account manager is ready Signed-off-by: Jonny Lamb --- libempathy/empathy-chatroom-manager.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'libempathy/empathy-chatroom-manager.c') diff --git a/libempathy/empathy-chatroom-manager.c b/libempathy/empathy-chatroom-manager.c index 7c3559e2f..c6318abd3 100644 --- a/libempathy/empathy-chatroom-manager.c +++ b/libempathy/empathy-chatroom-manager.c @@ -52,6 +52,7 @@ typedef struct GList *chatrooms; gchar *file; EmpathyAccountManager *account_manager; + gulong account_manager_ready_handler_id; /* source id of the autosave timer */ gint save_timer_id; } EmpathyChatroomManagerPriv; @@ -356,6 +357,12 @@ chatroom_manager_finalize (GObject *object) priv = GET_PRIV (object); + if (priv->account_manager_ready_handler_id > 0) + { + g_signal_handler_disconnect (priv->account_manager, + priv->account_manager_ready_handler_id); + } + g_object_unref (priv->account_manager); if (priv->save_timer_id > 0) @@ -382,6 +389,21 @@ chatroom_manager_finalize (GObject *object) (G_OBJECT_CLASS (empathy_chatroom_manager_parent_class)->finalize) (object); } +static void +account_manager_ready_cb (GObject *gobject, + GParamSpec *pspec, + gpointer user_data) +{ + EmpathyChatroomManager *self = EMPATHY_CHATROOM_MANAGER (user_data); + EmpathyChatroomManagerPriv *priv = GET_PRIV (self); + + chatroom_manager_get_all (self); + + g_signal_handler_disconnect (gobject, + priv->account_manager_ready_handler_id); + priv->account_manager_ready_handler_id = 0; +} + static GObject * empathy_chatroom_manager_constructor (GType type, guint n_props, @@ -406,6 +428,15 @@ empathy_chatroom_manager_constructor (GType type, priv->account_manager = empathy_account_manager_dup_singleton (); + priv->account_manager_ready_handler_id = 0; + + if (empathy_account_manager_is_ready (priv->account_manager)) + chatroom_manager_get_all (self); + else + priv->account_manager_ready_handler_id = g_signal_connect ( + G_OBJECT (priv->account_manager), "notify::ready", + G_CALLBACK (account_manager_ready_cb), self); + if (priv->file == NULL) { /* Set the default file path */ @@ -419,7 +450,6 @@ empathy_chatroom_manager_constructor (GType type, g_free (dir); } - chatroom_manager_get_all (self); return obj; } -- cgit v1.2.3