]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
2005-06-29 Colin Walters <walters@verbum.org>
authorColin Walters <walters@verbum.org>
Wed, 29 Jun 2005 23:52:35 +0000 (23:52 +0000)
committerColin Walters <walters@verbum.org>
Wed, 29 Jun 2005 23:52:35 +0000 (23:52 +0000)
* dbus/dbus-glib.h: Delete DBUS_TYPE_G_PROXY_ARRAY.  Add
DBUS_TYPE_G_OBJECT_PATH.

* glib/dbus-gvalue.c (dbus_g_value_types_init): Remove marshallers
for G_TYPE_OBJECT and DBUS_TYPE_G_PROXY_ARRAY (the latter should
be handled more generically).  Add DBUS_TYPE_G_OBJECT_PATH.
(dbus_g_object_path_get_g_type): New function.
(dbus_gtype_from_signature_iter): Map DBUS_TYPE_OBJECT_PATH
to DBUS_TYPE_G_OBJECT_PATH by default.
(demarshal_proxy): Remove unused name variable.
(demarshal_object_path, marshal_object_path): New functions.
(demarshal_proxy_array, marshal_proxy_array): Delete.

* glib/dbus-binding-tool-glib.c (dbus_g_type_get_c_name): Map
DBUS_TYPE_G_OBJECT_PATH to char *.
(dbus_g_type_get_lookup_function): Map builtin
DBUS_TYPE_G_OBJECT_PATH.

* test/glib/test-dbus-glib.c
* test/glib/test-service-glib.c (my_object_objpath):
Adapt tests to new object path marshalling.

ChangeLog
dbus/dbus-glib.h
glib/dbus-binding-tool-glib.c
glib/dbus-gvalue.c
test/glib/test-dbus-glib.c
test/glib/test-service-glib.c

index 450dcedd4896085ff2a20d8e442ab349875b0868..bce59c68ff3593046cc1e73a68414d6e5b926c36 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+2005-06-29  Colin Walters  <walters@verbum.org>
+
+       * dbus/dbus-glib.h: Delete DBUS_TYPE_G_PROXY_ARRAY.  Add
+       DBUS_TYPE_G_OBJECT_PATH.
+
+       * glib/dbus-gvalue.c (dbus_g_value_types_init): Remove marshallers
+       for G_TYPE_OBJECT and DBUS_TYPE_G_PROXY_ARRAY (the latter should
+       be handled more generically).  Add DBUS_TYPE_G_OBJECT_PATH.
+       (dbus_g_object_path_get_g_type): New function.
+       (dbus_gtype_from_signature_iter): Map DBUS_TYPE_OBJECT_PATH
+       to DBUS_TYPE_G_OBJECT_PATH by default.
+       (demarshal_proxy): Remove unused name variable.
+       (demarshal_object_path, marshal_object_path): New functions.
+       (demarshal_proxy_array, marshal_proxy_array): Delete.
+       
+       * glib/dbus-binding-tool-glib.c (dbus_g_type_get_c_name): Map
+       DBUS_TYPE_G_OBJECT_PATH to char *.
+       (dbus_g_type_get_lookup_function): Map builtin
+       DBUS_TYPE_G_OBJECT_PATH.
+
+       * test/glib/test-dbus-glib.c
+       * test/glib/test-service-glib.c (my_object_objpath): 
+       Adapt tests to new object path marshalling.
+
 2005-06-29  John (J5) Palmieri  <johnp@redhat.com>
 
        * configure.in: force check for Python >= 2.4
index 901b57209e8c242a9e64aeda0426ae140468a8ae..5e791e01662d7b7931c797781cb0be68b4ff5d72 100644 (file)
@@ -177,13 +177,13 @@ typedef struct _DBusGValue DBusGValue;
 
 #define DBUS_TYPE_G_STRING_STRING_HASHTABLE (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_STRING))
 
-/* D-BUS-specific types */
-#define DBUS_TYPE_G_PROXY_ARRAY          (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_PROXY))
-
 /* Generic recursive value */
 GType        dbus_g_value_get_g_type               (void) G_GNUC_CONST;
 #define DBUS_TYPE_G_VALUE                (dbus_g_value_get_g_type ())
 
+GType        dbus_g_object_path_get_g_type         (void) G_GNUC_CONST;
+#define DBUS_TYPE_G_OBJECT_PATH (dbus_g_object_path_get_g_type ())
+
 void         dbus_g_value_open              (DBusGValue          *value,
                                             DBusGValueIterator  *iter);
 
index 373faafff9d9d50315b23ce13ef94beec64edf29..4a33176bf7be82b7e7e7ef9ee0e2db1fe7cf41b4 100644 (file)
@@ -98,7 +98,8 @@ dbus_g_type_get_c_name (GType gtype)
   if (dbus_g_type_is_map (gtype))
     return "GHashTable";
   
-  if (g_type_is_a (gtype, G_TYPE_STRING))
+  if (g_type_is_a (gtype, G_TYPE_STRING)
+      || g_type_is_a (gtype, DBUS_TYPE_G_OBJECT_PATH))
     return "char *";
 
   /* This one is even more hacky...we get an extra *
@@ -892,7 +893,7 @@ dbus_g_type_get_lookup_function (GType gtype)
   MAP_KNOWN(G_TYPE_VALUE);
   MAP_KNOWN(G_TYPE_STRV);
   MAP_KNOWN(DBUS_TYPE_G_PROXY);
-  MAP_KNOWN(DBUS_TYPE_G_PROXY_ARRAY);
+  MAP_KNOWN(DBUS_TYPE_G_OBJECT_PATH);
   return NULL;
 }
 #undef MAP_FUNDAMENTAL
index 72ad737f75ea22ce83124bf592759750dae05549..d8ce3d2b212e52457d11390afedca6587208f44c 100644 (file)
@@ -88,15 +88,15 @@ static gboolean demarshal_proxy                 (DBusGValueMarshalCtx      *cont
                                                 DBusMessageIter           *iter,
                                                 GValue                    *value,
                                                 GError                   **error);
-static gboolean marshal_object                  (DBusMessageIter           *iter,
+static gboolean marshal_object_path             (DBusMessageIter           *iter,
                                                 GValue                    *value);
-static gboolean demarshal_object                (DBusGValueMarshalCtx      *context,
+static gboolean demarshal_object_path           (DBusGValueMarshalCtx      *context,
                                                 DBusMessageIter           *iter,
                                                 GValue                    *value,
                                                 GError                   **error);
-static gboolean marshal_proxy_array             (DBusMessageIter           *iter,
+static gboolean marshal_object                  (DBusMessageIter           *iter,
                                                 GValue                    *value);
-static gboolean demarshal_proxy_array           (DBusGValueMarshalCtx      *context,
+static gboolean demarshal_object                (DBusGValueMarshalCtx      *context,
                                                 DBusMessageIter           *iter,
                                                 GValue                    *value,
                                                 GError                   **error);
@@ -395,31 +395,48 @@ dbus_g_value_types_init (void)
 
   {
     static const DBusGTypeMarshalVtable vtable = {
-      marshal_object,
-      demarshal_object
+      marshal_object_path,
+      demarshal_object_path
     };
     static const DBusGTypeMarshalData typedata = {
       DBUS_TYPE_OBJECT_PATH_AS_STRING,
       &vtable
     };
-    set_type_metadata (G_TYPE_OBJECT, &typedata);
+    set_type_metadata (DBUS_TYPE_G_OBJECT_PATH, &typedata);
   }
 
   {
     static const DBusGTypeMarshalVtable vtable = {
-      marshal_proxy_array,
-      demarshal_proxy_array
+      marshal_object,
+      demarshal_object
     };
     static const DBusGTypeMarshalData typedata = {
-      DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_OBJECT_PATH_AS_STRING,
+      DBUS_TYPE_OBJECT_PATH_AS_STRING,
       &vtable
     };
-    set_type_metadata (DBUS_TYPE_G_PROXY_ARRAY, &typedata);
+    set_type_metadata (G_TYPE_OBJECT, &typedata);
   }
 
   types_initialized = TRUE;
 }
 
+/**
+ * Get the GLib type ID for a DBusGObjectPath boxed type.
+ *
+ * @returns GLib type
+ */
+GType
+dbus_g_object_path_get_g_type (void)
+{
+  static GType type_id = 0;
+
+  if (!type_id)
+    type_id = g_boxed_type_register_static ("DBusGObjectPath",
+                                           (GBoxedCopyFunc) g_strdup,
+                                           (GBoxedFreeFunc) g_free);
+  return type_id;
+}
+
 /**
  * Get the GLib type ID for a DBusGValue boxed type.
  *
@@ -592,7 +609,7 @@ dbus_gtype_from_signature_iter (DBusSignatureIter *iter, gboolean is_client)
   if (dbus_typecode_maps_to_basic (current_type))
     return basic_typecode_to_gtype (current_type);
   else if (current_type == DBUS_TYPE_OBJECT_PATH)
-    return is_client ? DBUS_TYPE_G_PROXY : G_TYPE_OBJECT;
+    return DBUS_TYPE_G_OBJECT_PATH;
   else
     {
       DBusSignatureIter subiter;
@@ -827,7 +844,6 @@ demarshal_proxy (DBusGValueMarshalCtx    *context,
                 GValue                  *value,
                 GError                 **error)
 {
-  const char *name;
   DBusGProxy *new_proxy;
   const char *objpath;
   int current_type;
@@ -837,8 +853,6 @@ demarshal_proxy (DBusGValueMarshalCtx    *context,
 
   g_assert (context->proxy != NULL);
   
-  name = dbus_g_proxy_get_bus_name (context->proxy);
-      
   dbus_message_iter_get_basic (iter, &objpath);
 
   new_proxy = dbus_g_proxy_new_from_proxy (context->proxy, NULL, objpath);
@@ -847,6 +861,25 @@ demarshal_proxy (DBusGValueMarshalCtx    *context,
   return TRUE;
 }
 
+static gboolean
+demarshal_object_path (DBusGValueMarshalCtx    *context,
+                      DBusMessageIter         *iter,
+                      GValue                  *value,
+                      GError                 **error)
+{
+  const char *objpath;
+  int current_type;
+
+  current_type = dbus_message_iter_get_arg_type (iter);
+  g_assert (current_type == DBUS_TYPE_OBJECT_PATH);
+
+  dbus_message_iter_get_basic (iter, &objpath);
+
+  g_value_set_boxed_take_ownership (value, g_strdup (objpath));
+
+  return TRUE;
+}
+
 static gboolean
 demarshal_object (DBusGValueMarshalCtx    *context,
                  DBusMessageIter         *iter,
@@ -950,50 +983,6 @@ demarshal_garray_basic (DBusGValueMarshalCtx    *context,
   return TRUE;
 }
 
-static gboolean
-demarshal_proxy_array (DBusGValueMarshalCtx    *context,
-                      DBusMessageIter         *iter,
-                      GValue                  *value,
-                      GError                 **error)
-{
-  DBusMessageIter subiter;
-  GPtrArray *ret;
-  guint len;
-  guint i;
-  int current_type;
-
-  g_assert (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_ARRAY);
-
-  dbus_message_iter_recurse (iter, &subiter);
-
-  len = dbus_message_iter_get_array_len (&subiter);
-  g_assert (len >= 0);
-  ret = g_ptr_array_sized_new (len);
-  
-  i = 0;
-  while ((current_type = dbus_message_iter_get_arg_type (&subiter)) != DBUS_TYPE_INVALID)
-    {
-      GValue subval = {0, };
-      g_assert (i < len);
-
-      if (!demarshal_proxy (context, &subiter, &subval, error))
-       {
-         for (i = 0; i < ret->len; i++)
-           g_object_unref (g_ptr_array_index (ret, i));
-         g_ptr_array_free (ret, TRUE);
-         return FALSE;
-       }
-
-      g_ptr_array_index (ret, i) = g_value_get_boxed (&subval);
-      /* Don't unset value, now owned by ret */
-
-      i++;
-    }
-  g_value_set_boxed_take_ownership (value, ret);
-  
-  return TRUE;
-}
-
 static gboolean
 demarshal_ghashtable (DBusGValueMarshalCtx    *context,
                      DBusMessageIter         *iter,
@@ -1392,6 +1381,23 @@ marshal_proxy (DBusMessageIter         *iter,
   return TRUE;
 }
 
+static gboolean
+marshal_object_path (DBusMessageIter         *iter,
+                    GValue                  *value)
+{
+  const char *path;
+
+  g_assert (G_VALUE_TYPE (value) == DBUS_TYPE_G_OBJECT_PATH);
+
+  path = (const char*) g_value_get_boxed (value);
+  
+  if (!dbus_message_iter_append_basic (iter,
+                                      DBUS_TYPE_OBJECT_PATH,
+                                      &path))
+    return FALSE;
+  return TRUE;
+}
+
 static gboolean
 marshal_object (DBusMessageIter         *iter,
                GValue                  *value)
@@ -1413,46 +1419,6 @@ marshal_object (DBusMessageIter         *iter,
   return TRUE;
 }
 
-static gboolean
-marshal_proxy_array (DBusMessageIter   *iter,
-                    GValue            *value)
-{
-  DBusMessageIter subiter;
-  GPtrArray *array;
-  const char *subsignature_str;
-  gboolean ret = FALSE;
-  guint i;
-
-  subsignature_str = dbus_gtype_to_signature (DBUS_TYPE_G_PROXY);
-  g_assert (subsignature_str != NULL);
-
-  array = g_value_get_boxed (value);
-
-  if (!dbus_message_iter_open_container (iter,
-                                        DBUS_TYPE_ARRAY,
-                                        subsignature_str,
-                                        &subiter))
-    goto out;
-
-  for (i = 0; i < array->len; i++)
-    {
-      GValue val = {0, };
-
-      g_value_init (&val, DBUS_TYPE_G_PROXY);
-      g_value_set_static_boxed (&val, g_ptr_array_index (array, i));
-
-      marshal_proxy (&subiter, &val);
-
-      g_value_unset (&val);
-    }
-
-  if (!dbus_message_iter_close_container (iter, &subiter))
-    goto out;
-  ret = TRUE;
- out:
-  return ret;
-}
-
 struct DBusGLibHashMarshalData
 {
   const char *entry_sig;
index 178d819f2e7d5d1243b5af26ffce9427d7f5ced1..e8cb74af5633c72248a19ef05ef2eeec1814569e 100644 (file)
@@ -749,11 +749,14 @@ main (int argc, char **argv)
 
   {
     guint val;
+    char *ret_path;
     DBusGProxy *ret_proxy;
 
     g_print ("Calling (wrapped) objpath\n");
-    if (!org_freedesktop_DBus_Tests_MyObject_objpath (proxy, proxy, &ret_proxy, &error))
-      lose_gerror ("Failed to complete (wrapped) Objpath call", error);
+    if (!dbus_g_proxy_call (proxy, "Objpath", &error,
+                           DBUS_TYPE_G_PROXY, proxy, G_TYPE_INVALID,
+                           DBUS_TYPE_G_PROXY, &ret_proxy, G_TYPE_INVALID))
+      lose_gerror ("Failed to complete Objpath call", error);
     if (strcmp ("/org/freedesktop/DBus/Tests/MyTestObject2",
                dbus_g_proxy_get_path (ret_proxy)) != 0)
       lose ("(wrapped) objpath call returned unexpected proxy %s",
@@ -802,20 +805,25 @@ main (int argc, char **argv)
 
     g_print ("Calling objpath again\n");
     ret_proxy = NULL;
-    if (!org_freedesktop_DBus_Tests_MyObject_objpath (proxy, proxy, &ret_proxy, &error))
-      lose_gerror ("Failed to complete (wrapped) Objpath call 2", error);
-    if (strcmp ("/org/freedesktop/DBus/Tests/MyTestObject2",
-               dbus_g_proxy_get_path (ret_proxy)) != 0)
-      lose ("(wrapped) objpath call 2 returned unexpected proxy %s",
-           dbus_g_proxy_get_path (ret_proxy));
-    {
-      const char *iface = dbus_g_proxy_get_interface (ret_proxy);
-      g_print ("returned proxy has interface \"%s\"\n",
-              iface ? iface : "(NULL)");
-    }
-
-    dbus_g_proxy_set_interface (ret_proxy, "org.freedesktop.DBus.Tests.FooObject");
 
+    if (!dbus_g_proxy_call (proxy, "Objpath", &error,
+                           DBUS_TYPE_G_OBJECT_PATH,
+                           dbus_g_proxy_get_path (proxy),
+                           G_TYPE_INVALID,
+                           DBUS_TYPE_G_OBJECT_PATH,
+                           &ret_path,
+                           G_TYPE_INVALID))
+      lose_gerror ("Failed to complete (wrapped) Objpath call 2", error);
+    if (strcmp ("/org/freedesktop/DBus/Tests/MyTestObject2", ret_path) != 0)
+      lose ("(wrapped) objpath call 2 returned unexpected path %s",
+           ret_path);
+
+    ret_proxy = dbus_g_proxy_new_for_name_owner (connection,
+                                                "org.freedesktop.DBus.TestSuiteGLibService",
+                                                ret_path,
+                                                "org.freedesktop.DBus.Tests.FooObject",
+                                                &error);
+    
     val = 0;
     if (!org_freedesktop_DBus_Tests_FooObject_get_value (ret_proxy, &val, &error))
       lose_gerror ("Failed to complete (wrapped) GetValue call", error);
index 315f1d65d400ca3278ade5296bdf8fcf8adddce5..9d5dfcc8688c9e2cb098f86f4fdcd77527252c64 100644 (file)
@@ -61,7 +61,7 @@ gboolean my_object_many_return (MyObject *obj, guint32 *arg0, char **arg1, gint3
 gboolean my_object_recursive1 (MyObject *obj, GArray *array, guint32 *len_ret, GError **error);
 gboolean my_object_recursive2 (MyObject *obj, guint32 reqlen, GArray **array, GError **error);
 
-gboolean my_object_objpath (MyObject *obj, GObject *in, GObject **arg1, GError **error);
+gboolean my_object_objpath (MyObject *obj, const char *in, char **arg1, GError **error);
 
 gboolean my_object_stringify (MyObject *obj, GValue *value, char **ret, GError **error);
 gboolean my_object_unstringify (MyObject *obj, const char *str, GValue *value, GError **error);
@@ -362,9 +362,9 @@ my_object_many_uppercase (MyObject *obj, const char * const *in, char ***out, GE
 }
 
 gboolean
-my_object_objpath (MyObject *obj, GObject *incoming, GObject **outgoing, GError **error)
+my_object_objpath (MyObject *obj, const char *incoming, char **outgoing, GError **error)
 {
-  if ((GObject*) obj != incoming)
+  if (strcmp (incoming, "/org/freedesktop/DBus/Tests/MyTestObject"))
     {
       g_set_error (error,
                   MY_OBJECT_ERROR,
@@ -372,7 +372,7 @@ my_object_objpath (MyObject *obj, GObject *incoming, GObject **outgoing, GError
                   "invalid incoming object");
       return FALSE;
     }
-  *outgoing = g_object_ref (obj2);
+  *outgoing = g_strdup ("/org/freedesktop/DBus/Tests/MyTestObject2");
   return TRUE;
 }