[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