diff options
author | Pekka Pessi <Pekka.Pessi@nokia.com> | 2011-02-01 19:09:45 +0200 |
---|---|---|
committer | Pekka Pessi <Pekka.Pessi@nokia.com> | 2011-02-01 19:13:16 +0200 |
commit | 22798a79f92d1b4532583e2b22deb9f26424cb44 (patch) | |
tree | 540c4080e7571bf35ab51db3b8af14219edb100e | |
parent | 6f30ae520963264c3ef21c285963addea8e209ca (diff) |
ring-text-manager: close all channels when connection gets disconnected
-rw-r--r-- | src/ring-text-manager.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/ring-text-manager.c b/src/ring-text-manager.c index f0dd8b8..41c7172 100644 --- a/src/ring-text-manager.c +++ b/src/ring-text-manager.c @@ -97,6 +97,7 @@ struct _RingTextManagerPrivate struct { gulong receiving_sms_deliver, receiving_sms_status_report; gulong outgoing_sms_complete, outgoing_sms_error; + gulong status_changed; } signals; }; @@ -109,6 +110,10 @@ static void ring_text_manager_connected(RingTextManager *self); static void ring_text_manager_disconnect(RingTextManager *self); +static void on_connection_status_changed (TpBaseConnection *conn, + guint status, guint reason, + RingTextManager *self); + static gboolean ring_text_requestotron(RingTextManager *self, gpointer request, GHashTable *properties, @@ -156,6 +161,12 @@ static void ring_text_manager_receive_status_report( static void ring_text_manager_constructed(GObject *object) { + RingTextManager *self = RING_TEXT_MANAGER(object); + RingTextManagerPrivate *priv = self->priv; + + priv->signals.status_changed = g_signal_connect (priv->connection, + "status-changed", (GCallback) on_connection_status_changed, self); + if (G_OBJECT_CLASS(ring_text_manager_parent_class)->constructed) G_OBJECT_CLASS(ring_text_manager_parent_class)->constructed(object); } @@ -180,6 +191,8 @@ ring_text_manager_dispose(GObject *object) g_hash_table_remove_all (priv->channels); + ring_signal_disconnect (priv->connection, &priv->signals.status_changed); + G_OBJECT_CLASS(ring_text_manager_parent_class)->dispose(object); } @@ -374,6 +387,20 @@ ring_text_manager_disconnect (RingTextManager *self) priv->sms_service = NULL; } +static void +on_connection_status_changed (TpBaseConnection *conn, + guint status, + guint reason, + RingTextManager *self) +{ + RingTextManagerPrivate *priv = self->priv; + + if (status == TP_CONNECTION_STATUS_DISCONNECTED) + { + g_hash_table_remove_all (priv->channels); + } +} + /* ---------------------------------------------------------------------- */ /* Insert channel-type specific capabilities into array */ |