[telepathy-doc/master] Monitor the creation and destruction of accounts in the AM

Danielle Madeley danielle.madeley at collabora.co.uk
Tue Sep 22 23:45:17 PDT 2009


---
 docs/examples/gtk_presence_app/example.c         |   13 ++++++++++-
 docs/examples/gtk_presence_app/presence-widget.c |   23 ++++++++++++++++++++++
 2 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/docs/examples/gtk_presence_app/example.c b/docs/examples/gtk_presence_app/example.c
index 153bd62..a602934 100644
--- a/docs/examples/gtk_presence_app/example.c
+++ b/docs/examples/gtk_presence_app/example.c
@@ -29,6 +29,15 @@ dump_children (GtkWidget *widget,
 }
 
 static void
+account_created (TpAccountManager *am,
+                 TpAccount        *acct,
+                 PresenceWindow   *window)
+{
+  GtkWidget *widget = presence_widget_new (acct);
+  presence_window_add_widget (window, PRESENCE_WIDGET (widget));
+}
+
+static void
 account_manager_ready (TpAccountManager *am,
                        PresenceWindow   *window)
 {
@@ -39,12 +48,12 @@ account_manager_ready (TpAccountManager *am,
 
       GtkWidget *widget = presence_widget_new (acct);
       presence_window_add_widget (window, PRESENCE_WIDGET (widget));
-
     }
 
   g_list_free (accounts);
 
-  // dump_children (GTK_WIDGET (window), "|-");
+  g_signal_connect (am, "account-created",
+      G_CALLBACK (account_created), window);
 }
 
 static void
diff --git a/docs/examples/gtk_presence_app/presence-widget.c b/docs/examples/gtk_presence_app/presence-widget.c
index 28b0257..15bc8fa 100644
--- a/docs/examples/gtk_presence_app/presence-widget.c
+++ b/docs/examples/gtk_presence_app/presence-widget.c
@@ -154,6 +154,14 @@ _notify_status_message (PresenceWidget *self,
 }
 
 static void
+_account_removed (PresenceWidget *self,
+                  TpAccount      *account)
+{
+  /* this account has been removed, destroy ourselves */
+  gtk_widget_destroy (GTK_WIDGET (self));
+}
+
+static void
 presence_widget_constructed (GObject *self)
 {
   PresenceWidgetPrivate *priv = GET_PRIVATE (self);
@@ -167,6 +175,9 @@ presence_widget_constructed (GObject *self)
   g_signal_connect_swapped (priv->account, "notify::status-message",
       G_CALLBACK (_notify_status_message), self);
 
+  g_signal_connect_swapped (priv->account, "removed",
+      G_CALLBACK (_account_removed), self);
+
   _notify_enabled (PRESENCE_WIDGET (self), NULL, priv->account);
   _notify_display_name (PRESENCE_WIDGET (self), NULL, priv->account);
   _notify_presence (PRESENCE_WIDGET (self), NULL, priv->account);
@@ -174,11 +185,23 @@ presence_widget_constructed (GObject *self)
 }
 
 static void
+presence_widget_dispose (GObject *self)
+{
+  PresenceWidgetPrivate *priv = GET_PRIVATE (self);
+
+  g_object_unref (priv->account);
+  priv->account = NULL;
+
+  G_OBJECT_CLASS (presence_widget_parent_class)->dispose (self);
+}
+
+static void
 presence_widget_class_init (PresenceWidgetClass *class)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (class);
 
   gobject_class->constructed  = presence_widget_constructed;
+  gobject_class->dispose      = presence_widget_dispose;
   gobject_class->get_property = presence_widget_get_property;
   gobject_class->set_property = presence_widget_set_property;
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list