summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPekka Pessi <Pekka.Pessi@nokia.com>2011-02-01 19:09:45 +0200
committerPekka Pessi <Pekka.Pessi@nokia.com>2011-02-01 19:13:16 +0200
commit22798a79f92d1b4532583e2b22deb9f26424cb44 (patch)
tree540c4080e7571bf35ab51db3b8af14219edb100e
parent6f30ae520963264c3ef21c285963addea8e209ca (diff)
ring-text-manager: close all channels when connection gets disconnected
-rw-r--r--src/ring-text-manager.c27
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 */