2005-01-29 Havoc Pennington <hp@redhat.com>
authorHavoc Pennington <hp@redhat.com>
Sat, 29 Jan 2005 20:12:22 +0000 (20:12 +0000)
committerHavoc Pennington <hp@redhat.com>
Sat, 29 Jan 2005 20:12:22 +0000 (20:12 +0000)
* 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

ChangeLog
doc/dbus-specification.xml
glib/dbus-gobject.c
tools/dbus-tree-view.c

index e5367edc9e3d9b519fb74117e05b94ff0575d6f3..d964d45a09854dd96a38cbc55a6814f4c4261c88 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
index 973f390b50ed462f019be7d3acc72d6b6d9c197e..7a90e66431b537e94746da634fc05a321f16895f 100644 (file)
         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>
 
index 5aab4a68ac514dc9c600f44a7330994f597dcbbc..f08bf39e79656db70845cb686bfa589bf25f61aa 100644 (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)
index afcda0fe432ed1fa73664d1f3f92ebbf0f0d8bf6..7c52935e6dece77a7e016ce10a5c2692f8813d0b 100644 (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;