]> git.0d.be Git - empathy.git/commitdiff
roster-window: watch for TpAccount:connection changes
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Thu, 12 Jan 2012 11:25:21 +0000 (12:25 +0100)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Thu, 12 Jan 2012 12:14:52 +0000 (13:14 +0100)
The account being connected isn't longer enough to ensure that its
TpConnection is defined.

https://bugzilla.gnome.org/show_bug.cgi?id=667743

src/empathy-roster-window.c

index 7fc7f9a6b9aeda05bcde2bd6e1f676c9b59056ca..f45474cf2c265ac6b1e5be2a053a203afa8e2bd6 100644 (file)
@@ -1294,9 +1294,6 @@ roster_window_connection_changed_cb (TpAccount  *account,
     {
       empathy_sound_manager_play (self->priv->sound_mgr, GTK_WIDGET (self),
               EMPATHY_SOUND_ACCOUNT_DISCONNECTED);
-
-      /* remove balance action if required */
-      roster_window_remove_balance_action (self, account);
     }
 
   if (current == TP_CONNECTION_STATUS_CONNECTED)
@@ -1306,7 +1303,6 @@ roster_window_connection_changed_cb (TpAccount  *account,
 
       /* Account connected without error, remove error message if any */
       roster_window_remove_error (self, account);
-      roster_window_setup_balance (self, account);
     }
 }
 
@@ -2052,6 +2048,26 @@ roster_window_account_removed_cb (TpAccountManager  *manager,
   roster_window_remove_balance_action (self, account);
 }
 
+static void
+account_connection_notify_cb (TpAccount *account,
+    GParamSpec *spec,
+    EmpathyRosterWindow *self)
+{
+  TpConnection *conn;
+
+  conn = tp_account_get_connection (account);
+
+  if (conn != NULL)
+    {
+      roster_window_setup_balance (self, account);
+    }
+  else
+    {
+      /* remove balance action if required */
+      roster_window_remove_balance_action (self, account);
+    }
+}
+
 static void
 add_account (EmpathyRosterWindow *self,
     TpAccount *account)
@@ -2071,6 +2087,11 @@ add_account (EmpathyRosterWindow *self,
   g_hash_table_insert (self->priv->status_changed_handlers,
     account, GUINT_TO_POINTER (handler_id));
 
+  /* roster_window_setup_balance() relies on the TpConnection to be ready on
+   * the TpAccount so we connect this signal as well. */
+  tp_g_signal_connect_object (account, "notify::connection",
+      G_CALLBACK (account_connection_notify_cb), self, 0);
+
   roster_window_setup_balance (self, account);
 }