telepathy-qt: dbus-tubes: Make immutable properties writable in the test service

Dario Freddi drf at kemper.freedesktop.org
Tue Jul 3 15:08:42 PDT 2012


Module: telepathy-qt
Branch: master
Commit: 0c8db3e3a3e6769ae6bb60df81522bf577d29892
URL:    http://cgit.freedesktop.org/telepathy/telepathy-qt/commit/?id=0c8db3e3a3e6769ae6bb60df81522bf577d29892

Author: Dario Freddi <dario.freddi at collabora.com>
Date:   Thu Nov  3 22:02:29 2011 +0100

dbus-tubes: Make immutable properties writable in the test service

---

 tests/lib/glib/dbus-tube-chan.c |   75 +++++++++++++++++++++++++++++----------
 1 files changed, 56 insertions(+), 19 deletions(-)

diff --git a/tests/lib/glib/dbus-tube-chan.c b/tests/lib/glib/dbus-tube-chan.c
index 450ad39..61c5442 100644
--- a/tests/lib/glib/dbus-tube-chan.c
+++ b/tests/lib/glib/dbus-tube-chan.c
@@ -34,6 +34,10 @@ struct _TpTestsDBusTubeChannelPrivate {
 
     /* TpHandle -> gchar * */
     GHashTable *dbus_names;
+
+    GArray *supported_access_controls;
+
+    GHashTable *parameters;
 };
 
 static void
@@ -55,25 +59,11 @@ tp_tests_dbus_tube_channel_get_property (GObject *object,
         break;
 
       case PROP_SUPPORTED_ACCESS_CONTROLS:
-        {
-          GArray *array;
-          TpSocketAccessControl a;
-
-          array = g_array_sized_new (FALSE, FALSE, sizeof (guint), 1);
-
-          a = TP_SOCKET_ACCESS_CONTROL_LOCALHOST;
-          g_array_append_val (array, a);
-
-          g_value_set_boxed (value, array);
-
-          g_array_unref (array);
-        }
+        g_value_set_boxed (value, self->priv->supported_access_controls);
         break;
 
       case PROP_PARAMETERS:
-        g_value_take_boxed (value, tp_asv_new (
-              "badger", G_TYPE_UINT, 42,
-              NULL));
+        g_value_set_boxed (value, self->priv->parameters);
         break;
 
       case PROP_STATE:
@@ -86,6 +76,32 @@ tp_tests_dbus_tube_channel_get_property (GObject *object,
     }
 }
 
+static void
+tp_tests_dbus_tube_channel_set_property (GObject *object,
+    guint property_id,
+    const GValue *value,
+    GParamSpec *pspec)
+{
+  TpTestsDBusTubeChannel *self = (TpTestsDBusTubeChannel *) object;
+
+  switch (property_id)
+    {
+      case PROP_SUPPORTED_ACCESS_CONTROLS:
+        self->priv->supported_access_controls = g_value_dup_boxed (value);
+        break;
+
+      case PROP_PARAMETERS:
+        if (self->priv->parameters != NULL)
+          g_hash_table_destroy (self->priv->parameters);
+        self->priv->parameters = g_value_dup_boxed (value);
+        break;
+
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+        break;
+    }
+}
+
 static void dbus_tube_iface_init (gpointer iface, gpointer data);
 
 G_DEFINE_ABSTRACT_TYPE_WITH_CODE (TpTestsDBusTubeChannel,
@@ -125,9 +141,29 @@ constructor (GType type,
   TpTestsDBusTubeChannel *self = TP_TESTS_DBUS_TUBE_CHANNEL (object);
 
   if (tp_base_channel_is_requested (TP_BASE_CHANNEL (self)))
-    self->priv->state = TP_TUBE_CHANNEL_STATE_NOT_OFFERED;
+    {
+      self->priv->state = TP_TUBE_CHANNEL_STATE_NOT_OFFERED;
+      self->priv->parameters = tp_asv_new (NULL, NULL);
+    }
   else
-    self->priv->state = TP_TUBE_CHANNEL_STATE_LOCAL_PENDING;
+    {
+      self->priv->state = TP_TUBE_CHANNEL_STATE_LOCAL_PENDING;
+      self->priv->parameters = tp_asv_new ("badger", G_TYPE_UINT, 42,
+            NULL);
+    }
+
+  if (self->priv->supported_access_controls == NULL)
+    {
+      GArray *acontrols;
+      TpSocketAccessControl a;
+
+      acontrols = g_array_sized_new (FALSE, FALSE, sizeof (guint), 1);
+
+      a = TP_SOCKET_ACCESS_CONTROL_LOCALHOST;
+      acontrols = g_array_append_val (acontrols, a);
+
+      self->priv->supported_access_controls = acontrols;
+    }
 
   tp_base_channel_register (TP_BASE_CHANNEL (self));
 
@@ -196,6 +232,7 @@ tp_tests_dbus_tube_channel_class_init (TpTestsDBusTubeChannelClass *klass)
 
   object_class->constructor = constructor;
   object_class->get_property = tp_tests_dbus_tube_channel_get_property;
+  object_class->set_property = tp_tests_dbus_tube_channel_set_property;
   object_class->dispose = dispose;
 
   base_class->channel_type = TP_IFACE_CHANNEL_TYPE_DBUS_TUBE;
@@ -224,7 +261,7 @@ tp_tests_dbus_tube_channel_class_init (TpTestsDBusTubeChannelClass *klass)
       "Supported access-controls",
       "GArray containing supported access controls.",
       DBUS_TYPE_G_UINT_ARRAY,
-      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+      G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
   g_object_class_install_property (object_class,
       PROP_SUPPORTED_ACCESS_CONTROLS, param_spec);
 



More information about the telepathy-commits mailing list