[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