[empathy] disconnect NewChannels signal once we got all the list channels we care about
- From: Guillaume Desmottes <gdesmott src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [empathy] disconnect NewChannels signal once we got all the list channels we care about
- Date: Tue, 30 Mar 2010 10:10:15 +0000 (UTC)
commit c821e81c68acc1daba78899c9c844f916ea2c99e
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date: Wed Mar 24 11:49:18 2010 +0100
disconnect NewChannels signal once we got all the list channels we care about
libempathy/empathy-tp-contact-list.c | 20 +++++++++++++++++++-
1 files changed, 19 insertions(+), 1 deletions(-)
---
diff --git a/libempathy/empathy-tp-contact-list.c b/libempathy/empathy-tp-contact-list.c
index fd2cfaa..9288baa 100644
--- a/libempathy/empathy-tp-contact-list.c
+++ b/libempathy/empathy-tp-contact-list.c
@@ -54,6 +54,8 @@ typedef struct {
GHashTable *add_to_group; /* group name -> GArray of handles */
EmpathyContactListFlags flags;
+
+ TpProxySignalConnection *new_channels_sig;
} EmpathyTpContactListPriv;
typedef enum {
@@ -697,6 +699,15 @@ tp_contact_list_finalize (GObject *object)
G_OBJECT_CLASS (empathy_tp_contact_list_parent_class)->finalize (object);
}
+static gboolean
+received_all_list_channels (EmpathyTpContactList *self)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (self);
+
+ return (priv->stored != NULL && priv->publish != NULL &&
+ priv->subscribe != NULL);
+}
+
static void
got_list_channel (EmpathyTpContactList *list,
TpChannel *channel)
@@ -728,6 +739,12 @@ got_list_channel (EmpathyTpContactList *list,
G_CALLBACK (tp_contact_list_subscribe_group_members_changed_cb),
list);
}
+
+ if (received_all_list_channels (list) && priv->new_channels_sig != NULL) {
+ /* We don't need to watch NewChannels anymore */
+ tp_proxy_signal_connection_disconnect (priv->new_channels_sig);
+ priv->new_channels_sig = NULL;
+ }
}
static void
@@ -815,7 +832,8 @@ conn_ready_cb (TpConnection *connection,
/* Watch the NewChannels signal so if ensuring list channels fails (for
* example because the server is slow and the D-Bus call timeouts before CM
* fetches the roster), we have a chance to get them later. */
- tp_cli_connection_interface_requests_connect_to_new_channels (
+ priv->new_channels_sig =
+ tp_cli_connection_interface_requests_connect_to_new_channels (
priv->connection, new_channels_cb, NULL, NULL, G_OBJECT (list), NULL);
/* Request the 'stored' list. */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]