diff options
author | Xavier Claessens <xclaesse@src.gnome.org> | 2009-01-07 00:47:57 +0800 |
---|---|---|
committer | Xavier Claessens <xclaesse@src.gnome.org> | 2009-01-07 00:47:57 +0800 |
commit | a7da89d2a228975ee1c2df2c0aa0206123692c32 (patch) | |
tree | 037e4b382df70ed1659928c1456e06eb1d510bec /libempathy-gtk/empathy-contact-list-store.c | |
parent | f3571f23063cebdea9e7c3fb0fa91e40c82cdaca (diff) | |
download | gsoc2013-empathy-a7da89d2a228975ee1c2df2c0aa0206123692c32.tar gsoc2013-empathy-a7da89d2a228975ee1c2df2c0aa0206123692c32.tar.gz gsoc2013-empathy-a7da89d2a228975ee1c2df2c0aa0206123692c32.tar.bz2 gsoc2013-empathy-a7da89d2a228975ee1c2df2c0aa0206123692c32.tar.lz gsoc2013-empathy-a7da89d2a228975ee1c2df2c0aa0206123692c32.tar.xz gsoc2013-empathy-a7da89d2a228975ee1c2df2c0aa0206123692c32.tar.zst gsoc2013-empathy-a7da89d2a228975ee1c2df2c0aa0206123692c32.zip |
Always disconnect signals for safety on _finalize ().
svn path=/trunk/; revision=2062
Diffstat (limited to 'libempathy-gtk/empathy-contact-list-store.c')
-rw-r--r-- | libempathy-gtk/empathy-contact-list-store.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/libempathy-gtk/empathy-contact-list-store.c b/libempathy-gtk/empathy-contact-list-store.c index 38a7aeaad..dba27df53 100644 --- a/libempathy-gtk/empathy-contact-list-store.c +++ b/libempathy-gtk/empathy-contact-list-store.c @@ -143,6 +143,8 @@ static gboolean contact_list_store_update_list_mode_foreach (GtkTreeMod GtkTreeIter *iter, EmpathyContactListStore *store); static gboolean contact_list_store_iface_setup (gpointer user_data); +static void disconnect_monitor_signals (EmpathyContactMonitor *monitor, + GObject *obj); enum { PROP_0, @@ -249,6 +251,10 @@ static void contact_list_store_finalize (GObject *object) { EmpathyContactListStorePriv *priv = GET_PRIV (object); + EmpathyContactMonitor *monitor; + + monitor = empathy_contact_list_get_monitor (priv->list); + disconnect_monitor_signals (monitor, object); g_signal_handlers_disconnect_by_func (priv->list, G_CALLBACK (contact_list_store_groups_changed_cb), @@ -1067,6 +1073,27 @@ contact_monitor_contact_removed_cb (EmpathyContactMonitor *monitor, contact_list_store_remove_contact (store, contact); } + +static void +disconnect_monitor_signals (EmpathyContactMonitor *monitor, + GObject *obj) +{ + g_signal_handlers_disconnect_by_func (monitor, + contact_monitor_avatar_changed_cb, obj); + g_signal_handlers_disconnect_by_func (monitor, + contact_monitor_capabilities_changed_cb, obj); + g_signal_handlers_disconnect_by_func (monitor, + contact_monitor_contact_added_cb, obj); + g_signal_handlers_disconnect_by_func (monitor, + contact_monitor_contact_removed_cb, obj); + g_signal_handlers_disconnect_by_func (monitor, + contact_monitor_name_changed_cb, obj); + g_signal_handlers_disconnect_by_func (monitor, + contact_monitor_presence_changed_cb, obj); + g_signal_handlers_disconnect_by_func (monitor, + contact_monitor_presence_message_changed_cb, obj); +} + static gboolean contact_list_store_iface_setup (gpointer user_data) { |