diff options
author | Colin Walters <walters@verbum.org> | 2005-02-27 17:38:12 +0000 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2005-02-27 17:38:12 +0000 |
commit | 2b97fb81a508a047b14f4c4426c28abfd18bb2e0 (patch) | |
tree | d44ef7f2fe5d373ac44e3a41add8bd3f08e2a8fc /glib/dbus-gobject.c | |
parent | ee27481d7b7d6d9a4f41b7d641a2618dedf676dd (diff) |
2005-02-27 Colin Walters <walters@verbum.org>
* glib/dbus-gidl.c (property_info_get_type, arg_info_get_type):
Change return value to const char * instead of int so we can do
full signatures.
(struct PropertyInfo, struct ArgInfo): Store char *.
(property_info_new, arg_info_new): Update parameters, strdup.
(property_info_unref, arg_info_unref): Free.
* glib/dbus-gidl.h: Update prototypes.
* glib/dbus-gparser.c (basic_type_from_string): Delete.
(validate_signature): New function, just validates signature and
sets GError.
(parse_property, parse_arg): Invoke validate_signature. Store
signature instead of just type code.
* glib/dbus-gvalue.c (base_type_from_signature): New utility
function to return a primary type for a signature, dropping
information about types in container types.
(dbus_gvalue_genmarshal_name_from_type)
(dbus_gvalue_binding_type_from_type)
(dbus_gvalue_ctype_from_type): Update to take full signature
instead of type code.
(dbus_gtype_to_dbus_type): Moved here from glib/dbus-gobject.c.
* glib/dbus-gvalue.h: Update prototypes for above.
* glib/dbus-gobject.c (gtype_to_dbus_type): Moved to
glib/dbus-gvalue.c as dbus_gtype_to_dbus_type.
(introspect_properties, introspect_signals, write_interface):
Update to handle signatures, and remove usage of
_dbus_gutils_type_to_string.
(handle_introspect): Print out type codes instead of e.g. "string"
in hardcoded introspection XML; also use x_AS_STRING constants
instead of hardcoding in string.
* glib/dbus-glib-tool.c (pretty_print): Handle signature change
to string. Remove usage of _dbus_gutils_type_to_string.
* glib/dbus-gutils.c (_dbus_gutils_type_to_string): Delete.
* glib/dbus-gutils.h (_dbus_gutils_type_to_string): Update for
deletion.
* glib/dbus-binding-tool-glib.c (compute_marshaller)
(compute_marshaller_name, generate_glue): Handle signature change
to string.
(write_formal_parameters, write_args_for_direction): Ditto, and
remove FIXME.
* tools/dbus-tree-view.c (type_to_string): Delete.
(info_set_func_text): Update to print full signatures.
* test/glib/test-service-glib.xml: Change types to new
introspection format.
Diffstat (limited to 'glib/dbus-gobject.c')
-rw-r--r-- | glib/dbus-gobject.c | 69 |
1 files changed, 14 insertions, 55 deletions
diff --git a/glib/dbus-gobject.c b/glib/dbus-gobject.c index af87ffeb..7ab4dd1b 100644 --- a/glib/dbus-gobject.c +++ b/glib/dbus-gobject.c @@ -247,47 +247,6 @@ gobject_unregister_function (DBusConnection *connection, } -static int -gtype_to_dbus_type (GType type) -{ - switch (type) - { - case G_TYPE_CHAR: - case G_TYPE_UCHAR: - return DBUS_TYPE_BYTE; - - case G_TYPE_BOOLEAN: - return DBUS_TYPE_BOOLEAN; - - /* long gets cut to 32 bits so the remote API is consistent - * on all architectures - */ - - case G_TYPE_LONG: - case G_TYPE_INT: - return DBUS_TYPE_INT32; - case G_TYPE_ULONG: - case G_TYPE_UINT: - return DBUS_TYPE_UINT32; - - case G_TYPE_INT64: - return DBUS_TYPE_INT64; - - case G_TYPE_UINT64: - return DBUS_TYPE_UINT64; - - case G_TYPE_FLOAT: - case G_TYPE_DOUBLE: - return DBUS_TYPE_DOUBLE; - - case G_TYPE_STRING: - return DBUS_TYPE_STRING; - - default: - return DBUS_TYPE_INVALID; - } -} - static void introspect_properties (GObject *object, GString *xml) { @@ -303,13 +262,13 @@ introspect_properties (GObject *object, GString *xml) for (i = 0; i < n_specs; i++ ) { char *s; - int dbus_type; + const char *dbus_type; gboolean can_set; gboolean can_get; GParamSpec *spec = specs[i]; - dbus_type = gtype_to_dbus_type (G_PARAM_SPEC_VALUE_TYPE (spec)); - if (dbus_type == DBUS_TYPE_INVALID) + dbus_type = dbus_gtype_to_dbus_type (G_PARAM_SPEC_VALUE_TYPE (spec)); + if (dbus_type == NULL) continue; if (spec->owner_type != last_type) @@ -341,7 +300,7 @@ introspect_properties (GObject *object, GString *xml) g_string_append (xml, " <property name=\""); g_string_append (xml, s); g_string_append (xml, "\" type=\""); - g_string_append (xml, _dbus_gutils_type_to_string (dbus_type)); + g_string_append (xml, dbus_type); g_string_append (xml, "\" access=\""); if (can_set && can_get) @@ -397,10 +356,10 @@ introspect_signals (GType type, GString *xml) for (arg = 0; arg < query.n_params; arg++) { - int dbus_type = gtype_to_dbus_type (query.param_types[arg]); + const char *dbus_type = dbus_gtype_to_dbus_type (query.param_types[arg]); g_string_append (xml, " <arg type=\""); - g_string_append (xml, _dbus_gutils_type_to_string (dbus_type)); + g_string_append (xml, dbus_type); g_string_append (xml, "\"/>\n"); } @@ -455,7 +414,7 @@ write_interface (gpointer key, gpointer val, gpointer user_data) /* FIXME - handle container types */ g_string_append_printf (xml, " <arg name=\"%s\" type=\"%s\" direction=\"%s\"/>\n", - name, _dbus_gutils_type_to_string (type[0]), arg_in ? "in" : "out"); + name, type, arg_in ? "in" : "out"); } g_string_append (xml, " </method>\n"); @@ -543,21 +502,21 @@ handle_introspect (DBusConnection *connection, /* We are introspectable, though I guess that was pretty obvious */ g_string_append_printf (xml, " <interface name=\"%s\">\n", DBUS_INTERFACE_INTROSPECTABLE); g_string_append (xml, " <method name=\"Introspect\">\n"); - g_string_append (xml, " <arg name=\"data\" direction=\"out\" type=\"string\"/>\n"); + g_string_append_printf (xml, " <arg name=\"data\" direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING); g_string_append (xml, " </method>\n"); g_string_append (xml, " </interface>\n"); /* We support get/set properties */ g_string_append_printf (xml, " <interface name=\"%s\">\n", DBUS_INTERFACE_PROPERTIES); g_string_append (xml, " <method name=\"Get\">\n"); - g_string_append (xml, " <arg name=\"interface\" direction=\"in\" type=\"string\"/>\n"); - g_string_append (xml, " <arg name=\"propname\" direction=\"in\" type=\"string\"/>\n"); - g_string_append (xml, " <arg name=\"value\" direction=\"out\" type=\"variant\"/>\n"); + g_string_append_printf (xml, " <arg name=\"interface\" direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING); + g_string_append_printf (xml, " <arg name=\"propname\" direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING); + g_string_append_printf (xml, " <arg name=\"value\" direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_VARIANT_AS_STRING); g_string_append (xml, " </method>\n"); g_string_append (xml, " <method name=\"Set\">\n"); - g_string_append (xml, " <arg name=\"interface\" direction=\"in\" type=\"string\"/>\n"); - g_string_append (xml, " <arg name=\"propname\" direction=\"in\" type=\"string\"/>\n"); - g_string_append (xml, " <arg name=\"value\" direction=\"in\" type=\"variant\"/>\n"); + g_string_append_printf (xml, " <arg name=\"interface\" direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING); + g_string_append_printf (xml, " <arg name=\"propname\" direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING); + g_string_append_printf (xml, " <arg name=\"value\" direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_VARIANT_AS_STRING); g_string_append (xml, " </method>\n"); g_string_append (xml, " </interface>\n"); |