[Telepathy-commits] [telepathy-salut/master] SalutTubeIface: don't make the "state" property writeable, add a proper function salut_tube_iface_accepted() instead
Alban Crequy
alban.crequy at collabora.co.uk
Mon Nov 24 10:51:18 PST 2008
---
src/salut-tubes-channel.c | 4 +---
src/tube-iface.c | 12 +++++++++++-
src/tube-iface.h | 5 +++++
src/tube-stream.c | 24 +++++++++++++++++++-----
4 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/src/salut-tubes-channel.c b/src/salut-tubes-channel.c
index 90edf7c..7619220 100644
--- a/src/salut-tubes-channel.c
+++ b/src/salut-tubes-channel.c
@@ -1823,9 +1823,7 @@ iq_reply_cb (GibberIqHelper *helper,
return;
}
- g_object_set (tube,
- "state", TP_TUBE_STATE_OPEN,
- NULL);
+ salut_tube_iface_accepted (tube);
DEBUG ("The contact has accepted our tube offer");
}
diff --git a/src/tube-iface.c b/src/tube-iface.c
index bcb0337..244d3ba 100644
--- a/src/tube-iface.c
+++ b/src/tube-iface.c
@@ -33,6 +33,16 @@ salut_tube_iface_accept (SalutTubeIface *self,
return virtual_method (self, error);
}
+void
+salut_tube_iface_accepted (SalutTubeIface *self)
+{
+ void (*virtual_method)(SalutTubeIface *) =
+ SALUT_TUBE_IFACE_GET_CLASS (self)->accepted;
+ if (virtual_method != NULL)
+ virtual_method (self);
+ /* else nothing to do */
+}
+
gboolean
salut_tube_iface_offer_needed (SalutTubeIface *self)
{
@@ -167,7 +177,7 @@ salut_tube_iface_base_init (gpointer klass)
"Tube state",
"The SalutTubeState of this DBUS tube object",
0, G_MAXUINT32, TP_TUBE_STATE_REMOTE_PENDING,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
g_object_interface_install_property (klass, param_spec);
initialized = TRUE;
diff --git a/src/tube-iface.h b/src/tube-iface.h
index 19f291f..189c97e 100644
--- a/src/tube-iface.h
+++ b/src/tube-iface.h
@@ -33,6 +33,7 @@ struct _SalutTubeIfaceClass {
GTypeInterface parent;
gboolean (*accept) (SalutTubeIface *tube, GError **error);
+ void (*accepted) (SalutTubeIface *tube);
gboolean (*offer_needed) (SalutTubeIface *tube);
int (*listen) (SalutTubeIface *tube);
void (*close) (SalutTubeIface *tube, gboolean local);
@@ -58,8 +59,12 @@ gboolean salut_tube_iface_offer_needed (SalutTubeIface *tube);
int salut_tube_iface_listen (SalutTubeIface *tube);
+/* accept the tube offered by the contact */
gboolean salut_tube_iface_accept (SalutTubeIface *tube, GError **error);
+/* the contact accepted our tube offer */
+void salut_tube_iface_accepted (SalutTubeIface *tube);
+
void salut_tube_iface_close (SalutTubeIface *tube, gboolean closed_remotely);
void salut_tube_iface_add_bytestream (SalutTubeIface *tube,
diff --git a/src/tube-stream.c b/src/tube-stream.c
index 62dd637..8a6e4a9 100644
--- a/src/tube-stream.c
+++ b/src/tube-stream.c
@@ -1040,11 +1040,6 @@ salut_tube_stream_set_property (GObject *object,
case PROP_PARAMETERS:
priv->parameters = g_value_get_boxed (value);
break;
- case PROP_STATE:
- priv->state = g_value_get_uint (value);
- if (priv->state == TP_TUBE_STATE_OPEN)
- g_signal_emit (G_OBJECT (self), signals[OPENED], 0);
- break;
case PROP_ADDRESS_TYPE:
g_assert (g_value_get_uint (value) == TP_SOCKET_ADDRESS_TYPE_UNIX ||
g_value_get_uint (value) == TP_SOCKET_ADDRESS_TYPE_IPV4 ||
@@ -1499,6 +1494,24 @@ salut_tube_stream_accept (SalutTubeIface *tube,
}
/**
+ * salut_tube_stream_accepted
+ *
+ * Implements salut_tube_iface_accepted on SalutTubeIface
+ */
+static void
+salut_tube_stream_accepted (SalutTubeIface *tube)
+{
+ SalutTubeStream *self = SALUT_TUBE_STREAM (tube);
+ SalutTubeStreamPrivate *priv = SALUT_TUBE_STREAM_GET_PRIVATE (self);
+
+ if (priv->state == TP_TUBE_STATE_OPEN)
+ return;
+
+ priv->state = TP_TUBE_STATE_OPEN;
+ g_signal_emit (G_OBJECT (self), signals[OPENED], 0);
+}
+
+/**
* salut_tube_stream_offer_needed
*
* Implements salut_tube_iface_offer_needed on SalutTubeIface
@@ -1911,6 +1924,7 @@ tube_iface_init (gpointer g_iface,
SalutTubeIfaceClass *klass = (SalutTubeIfaceClass *) g_iface;
klass->accept = salut_tube_stream_accept;
+ klass->accepted = salut_tube_stream_accepted;
klass->offer_needed = salut_tube_stream_offer_needed;
klass->listen = salut_tube_stream_listen;
klass->close = salut_tube_stream_close;
--
1.5.6.5
More information about the Telepathy-commits
mailing list