2005-01-29 Havoc Pennington <hp@redhat.com>

* tools/dbus-tree-view.c: add support for displaying properties.
	(run dbus-viewer with an introspect xml file as arg, then resize
	the window so the tree elements show up, not sure what that is)

	* glib/dbus-gobject.c (handle_introspect): return
	org.freedesktop.Properties and org.freedesktop.Introspectable
	interfaces when we are introspected.

	* doc/dbus-specification.xml: allow empty interface name when
	Get/Set a property
This commit is contained in:
Havoc Pennington 2005-01-29 20:12:22 +00:00
parent fd3e49f249
commit 2922b0e88b
4 changed files with 54 additions and 2 deletions

View file

@ -1,3 +1,16 @@
2005-01-29 Havoc Pennington <hp@redhat.com>
* tools/dbus-tree-view.c: add support for displaying properties.
(run dbus-viewer with an introspect xml file as arg, then resize
the window so the tree elements show up, not sure what that is)
* glib/dbus-gobject.c (handle_introspect): return
org.freedesktop.Properties and org.freedesktop.Introspectable
interfaces when we are introspected.
* doc/dbus-specification.xml: allow empty interface name when
Get/Set a property
2005-01-29 Havoc Pennington <hp@redhat.com>
* glib/Makefile.am: rename dbus-glib-tool to dbus-binding-tool;

View file

@ -2147,6 +2147,13 @@
by calling <literal>org.freedesktop.Introspectable.Introspect</literal>,
see <xref linkend="standard-interfaces-introspectable"/>.
</para>
<para>
An empty string may be provided for the interface name; in this case,
if there are multiple properties on an object with the same name,
the results are undefined (picking one by according to an arbitrary
deterministic rule, or returning an error, are the reasonable
possibilities).
</para>
</sect2>
</sect1>

View file

@ -290,6 +290,27 @@ handle_introspect (DBusConnection *connection,
xml = g_string_new (NULL);
g_string_append (xml, "<node>\n");
/* We are introspectable, though I guess that was pretty obvious */
g_string_append (xml, " <interface name=\"org.freedesktop.Introspectable\">\n");
g_string_append (xml, " <method name=\"Introspect\">\n");
g_string_append (xml, " <arg name=\"data\" direction=\"out\" type=\"string\"\"/>\n");
g_string_append (xml, " </method>\n");
g_string_append (xml, " </interface>\n");
/* We support get/set properties */
g_string_append (xml, " <interface name=\"org.freedesktop.Properties\">\n");
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 (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 (xml, " </method>\n");
g_string_append (xml, " </interface>\n");
introspect_signals (G_OBJECT_TYPE (object), xml);
introspect_properties (object, xml);
@ -409,7 +430,7 @@ gobject_message_function (DBusConnection *connection,
gboolean getter;
char *s;
const char *wincaps_propname;
const char *wincaps_propiface;
/* const char *wincaps_propiface; */
DBusMessageIter iter;
object = G_OBJECT (user_data);
@ -460,7 +481,10 @@ gobject_message_function (DBusConnection *connection,
g_warning ("Property get or set does not have an interface string as first arg\n");
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
dbus_message_iter_get_basic (&iter, &wincaps_propiface);
/* We never use the interface name; if we did, we'd need to
* remember that it can be empty string for "pick one for me"
*/
/* dbus_message_iter_get_basic (&iter, &wincaps_propiface); */
dbus_message_iter_next (&iter);
if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRING)

View file

@ -134,6 +134,8 @@ set_info (GtkTreeModel *model,
interface_info_get_methods ((InterfaceInfo*)info));
append_child_list (model, root,
interface_info_get_signals ((InterfaceInfo*)info));
append_child_list (model, root,
interface_info_get_properties ((InterfaceInfo*)info));
break;
case INFO_TYPE_METHOD:
append_child_list (model, root,
@ -143,6 +145,9 @@ set_info (GtkTreeModel *model,
append_child_list (model, root,
signal_info_get_args ((SignalInfo*)info));
break;
case INFO_TYPE_PROPERTY:
/* no children */
break;
case INFO_TYPE_ARG:
/* no children */
break;
@ -292,6 +297,9 @@ info_set_func_text (GtkTreeViewColumn *tree_column,
case INFO_TYPE_SIGNAL:
g_string_append (str, "<i>signal</i>");
break;
case INFO_TYPE_PROPERTY:
g_string_append (str, "<i>property</i>");
break;
case INFO_TYPE_ARG:
g_string_append (str, "<i>arg</i>");
break;