diff options
author | Pekka Pessi <Pekka.Pessi@nokia.com> | 2011-02-01 19:07:56 +0200 |
---|---|---|
committer | Pekka Pessi <Pekka.Pessi@nokia.com> | 2011-02-01 19:13:16 +0200 |
commit | 3d4b5f2fd3da0dee25d9b626f44a9d6bc3801876 (patch) | |
tree | 4ccd32dff34e9533499cac6842c0d251ef392a5c | |
parent | 22798a79f92d1b4532583e2b22deb9f26424cb44 (diff) |
ring-media-manager: close all channels when connection gets disconnected
-rw-r--r-- | src/ring-media-manager.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/ring-media-manager.c b/src/ring-media-manager.c index 69687db..71a9b11 100644 --- a/src/ring-media-manager.c +++ b/src/ring-media-manager.c @@ -98,6 +98,10 @@ static void ring_media_manager_connected (RingMediaManager *self); static void ring_media_manager_disconnect(RingMediaManager *self); +static void on_connection_status_changed (TpBaseConnection *conn, + guint status, guint reason, + RingMediaManager *self); + static gboolean ring_media_requestotron(RingMediaManager *, gpointer, GHashTable *, @@ -175,6 +179,7 @@ struct _RingMediaManagerPrivate struct { gulong incoming, created, removed; gulong emergency_numbers, joined, user_connection; + gulong status_changed; } signals; unsigned dispose_has_run:1, :0; @@ -195,6 +200,12 @@ ring_media_manager_init(RingMediaManager *self) static void ring_media_manager_constructed(GObject *object) { + RingMediaManager *self = RING_MEDIA_MANAGER(object); + RingMediaManagerPrivate *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_media_manager_parent_class)->constructed) G_OBJECT_CLASS(ring_media_manager_parent_class)->constructed(object); } @@ -209,6 +220,8 @@ ring_media_manager_dispose(GObject *object) return; priv->dispose_has_run = TRUE; + ring_signal_disconnect (priv->connection, &priv->signals.status_changed); + g_object_set (object, "call-service", NULL, NULL); g_object_run_dispose (G_OBJECT (priv->tones)); @@ -389,6 +402,20 @@ ring_media_manager_is_connected (RingMediaManager *self) return RING_IS_MEDIA_MANAGER (self) && self->priv->call_service != NULL; } +static void +on_connection_status_changed (TpBaseConnection *conn, + guint status, + guint reason, + RingMediaManager *self) +{ + RingMediaManagerPrivate *priv = self->priv; + + if (status == TP_CONNECTION_STATUS_DISCONNECTED) + { + g_hash_table_remove_all (priv->channels); + } +} + /* ---------------------------------------------------------------------- */ RingEmergencyServiceInfoList * |