empathy r1569 - trunk/libempathy
- From: xclaesse svn gnome org
- To: svn-commits-list gnome org
- Subject: empathy r1569 - trunk/libempathy
- Date: Mon, 13 Oct 2008 07:55:13 +0000 (UTC)
Author: xclaesse
Date: Mon Oct 13 07:55:13 2008
New Revision: 1569
URL: http://svn.gnome.org/viewvc/empathy?rev=1569&view=rev
Log:
disconnect chatroom signals when they are removed from the mgr
Modified:
trunk/libempathy/empathy-chatroom-manager.c
Modified: trunk/libempathy/empathy-chatroom-manager.c
==============================================================================
--- trunk/libempathy/empathy-chatroom-manager.c (original)
+++ trunk/libempathy/empathy-chatroom-manager.c Mon Oct 13 07:55:13 2008
@@ -56,6 +56,7 @@
static void chatroom_manager_parse_chatroom (EmpathyChatroomManager *manager,
xmlNodePtr node);
static gboolean chatroom_manager_file_save (EmpathyChatroomManager *manager);
+static void reset_save_timeout (EmpathyChatroomManager *self);
enum {
CHATROOM_ADDED,
@@ -204,10 +205,19 @@
}
static void
+chatroom_changed_cb (EmpathyChatroom *chatroom,
+ GParamSpec *spec,
+ EmpathyChatroomManager *self)
+{
+ reset_save_timeout (self);
+}
+
+static void
chatroom_manager_finalize (GObject *object)
{
EmpathyChatroomManager *self = EMPATHY_CHATROOM_MANAGER (object);
EmpathyChatroomManagerPriv *priv;
+ GList *l;
priv = GET_PRIV (object);
@@ -219,7 +229,16 @@
chatroom_manager_file_save (self);
}
- g_list_foreach (priv->chatrooms, (GFunc) g_object_unref, NULL);
+ for (l = priv->chatrooms; l != NULL; l = g_list_next (l))
+ {
+ EmpathyChatroom *chatroom = l->data;
+
+ g_signal_handlers_disconnect_by_func (chatroom, chatroom_changed_cb,
+ self);
+
+ g_object_unref (chatroom);
+ }
+
g_list_free (priv->chatrooms);
g_free (priv->file);
@@ -270,14 +289,6 @@
}
static void
-chatroom_changed_cb (EmpathyChatroom *chatroom,
- GParamSpec *spec,
- EmpathyChatroomManager *self)
-{
- reset_save_timeout (self);
-}
-
-static void
add_chatroom (EmpathyChatroomManager *self,
EmpathyChatroom *chatroom)
{
@@ -285,7 +296,6 @@
priv->chatrooms = g_list_prepend (priv->chatrooms, g_object_ref (chatroom));
- /* FIXME: disconnect when removed */
g_signal_connect (chatroom, "notify::favorite",
G_CALLBACK (chatroom_changed_cb), self);
g_signal_connect (chatroom, "notify::name",
@@ -361,6 +371,10 @@
}
g_signal_emit (manager, signals[CHATROOM_REMOVED], 0, this_chatroom);
+
+ g_signal_handlers_disconnect_by_func (chatroom, chatroom_changed_cb,
+ manager);
+
g_object_unref (this_chatroom);
break;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]