summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2005-01-29 20:12:22 +0000
committerHavoc Pennington <hp@redhat.com>2005-01-29 20:12:22 +0000
commit2922b0e88ba00b0067c23633075629108ad8a496 (patch)
tree50a0022443d38eddd79bbbd77241886391d6257c
parentfd3e49f249fb4ab5ac7da4fe9fc14cc67958d84a (diff)
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
-rw-r--r--ChangeLog13
-rw-r--r--doc/dbus-specification.xml7
-rw-r--r--glib/dbus-gobject.c28
-rw-r--r--tools/dbus-tree-view.c8
4 files changed, 54 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index e5367edc..d964d45a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
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;
though it uses glib, it could be extended for any binding in
principle
diff --git a/doc/dbus-specification.xml b/doc/dbus-specification.xml
index 973f390b..7a90e664 100644
--- a/doc/dbus-specification.xml
+++ b/doc/dbus-specification.xml
@@ -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>
diff --git a/glib/dbus-gobject.c b/glib/dbus-gobject.c
index 5aab4a68..f08bf39e 100644
--- a/glib/dbus-gobject.c
+++ b/glib/dbus-gobject.c
@@ -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)
diff --git a/tools/dbus-tree-view.c b/tools/dbus-tree-view.c
index afcda0fe..7c52935e 100644
--- a/tools/dbus-tree-view.c
+++ b/tools/dbus-tree-view.c
@@ -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;