]> git.0d.be Git - empathy.git/commitdiff
watch for chat properties change to detect if Chat has enabled/disabled
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Thu, 1 Sep 2011 12:03:24 +0000 (14:03 +0200)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Tue, 6 Sep 2011 05:37:08 +0000 (07:37 +0200)
goa-mc-plugin/mcp-account-manager-goa.c

index 6f06f340ddc3c73b043d53e76eb8f87a53792d9b..8717b2e458b16ffd37f53430eb543f388f3c2802 100644 (file)
@@ -158,6 +158,22 @@ get_tp_account_name (GoaAccount *account)
   return name;
 }
 
+static void
+object_chat_changed_cb (GoaObject *object,
+    GParamSpec *spec,
+    McpAccountManagerGoa *self)
+{
+  GoaAccount *account = goa_object_peek_account (object);
+  char *name = get_tp_account_name (account);
+  gboolean enabled;
+
+  enabled = (goa_object_peek_chat (object) != NULL);
+
+  DEBUG ("%s %s", name, enabled ? "enabled" : "disabled");
+
+  if (self->priv->ready)
+    g_signal_emit_by_name (self, "toggled", name, enabled);
+}
 
 static void
 _new_account (McpAccountManagerGoa *self,
@@ -175,6 +191,9 @@ _new_account (McpAccountManagerGoa *self,
 
   if (self->priv->ready)
     g_signal_emit_by_name (self, "created", account_name);
+
+  tp_g_signal_connect_object (object, "notify::chat",
+      G_CALLBACK (object_chat_changed_cb), self, 0);
 }
 
 
@@ -220,23 +239,6 @@ _account_removed_cb (GoaClient *client,
   g_free (name);
 }
 
-static void
-_account_changed_cb (GoaClient *client,
-    GoaObject *object,
-    McpAccountManagerGoa *self)
-{
-  GoaAccount *account = goa_object_peek_account (object);
-  char *name = get_tp_account_name (account);
-  gboolean enabled;
-
-  enabled = (goa_object_peek_chat (object) != NULL);
-
-  DEBUG ("%s %s", name, enabled ? "enabled" : "disabled");
-
-  if (self->priv->ready)
-    g_signal_emit_by_name (self, "toggled", name, enabled);
-}
-
 static void
 _goa_client_new_cb (GObject *obj,
     GAsyncResult *result,
@@ -268,8 +270,6 @@ _goa_client_new_cb (GObject *obj,
       G_CALLBACK (_account_added_cb), self);
   g_signal_connect (self->priv->client, "account-removed",
       G_CALLBACK (_account_removed_cb), self);
-  g_signal_connect (self->priv->client, "account-changed",
-      G_CALLBACK (_account_changed_cb), self);
 }