Add a NoReply annotation
authorRoss Burton <ross@openedhand.com>
Tue, 25 Oct 2005 08:54:57 +0000 (08:54 +0000)
committerRoss Burton <ross@openedhand.com>
Tue, 25 Oct 2005 08:54:57 +0000 (08:54 +0000)
ChangeLog
doc/dbus-specification.xml
glib/dbus-binding-tool-glib.c
glib/dbus-binding-tool-glib.h

index 4a33d60..0a47a0b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2005-10-25  Ross Burton  <ross@openedhand.com>
+
+       * doc/dbus-specification.xml:
+       Document the NoReply annotation.
+
+       * glib/dbus-binding-tool-glib.h:
+       * glib/dbus-binding-tool-glib.c:
+       Respect the NoReply annotation.
+
 2005-10-24  Robert McQueen <robot101@debian.org>
 
        * python/dbus_bindings.pyx (String, MessageIter): make D-Bus strings
index 0194ff4..a30e101 100644 (file)
             <entry>(string)</entry>
             <entry>The C symbol; may be used for methods and interfaces</entry>
           </row>
+          <row>
+            <entry>org.freedesktop.DBus.Method.NoReply</entry>
+            <entry>true,false</entry>
+            <entry>If set, don't expect a reply to the method call; defaults to false.</entry>
+          </row>
         </tbody>
        </tgroup>
      </informaltable>
index 7ad62f5..1d48097 100644 (file)
@@ -1446,11 +1446,14 @@ generate_client_glue (BaseInfo *base, DBusBindingToolCData *data, GError **error
 
       for (tmp = methods; tmp != NULL; tmp = g_slist_next (tmp))
         {
-          MethodInfo *method;
+         MethodInfo *method;
          char *method_name;
+         gboolean is_noreply;
 
           method = (MethodInfo *) tmp->data;
 
+         is_noreply = method_info_get_annotation (method, DBUS_GLIB_ANNOTATION_NOREPLY) != NULL;
+
          if (data->ignore_unsupported && !check_supported_parameters (method))
            {
              g_warning ("Ignoring unsupported signature in method \"%s\" of interface \"%s\"\n",
@@ -1473,22 +1476,40 @@ generate_client_glue (BaseInfo *base, DBusBindingToolCData *data, GError **error
          WRITE_OR_LOSE (", GError **error)\n\n");
          
          WRITE_OR_LOSE ("{\n");
-         
-         if (!write_printf_to_iochannel ("  return dbus_g_proxy_call (proxy, \"%s\", ", channel, error,
-                                         method_info_get_name (method)))
-           goto io_lose;
-
-         WRITE_OR_LOSE ("error, ");
-
-         if (!write_args_for_direction (interface, method, channel, ARG_IN, error))
-           goto io_lose;
-
-         WRITE_OR_LOSE ("G_TYPE_INVALID, ");
 
-         if (!write_args_for_direction (interface, method, channel, ARG_OUT, error))
-           goto io_lose;
-
-         WRITE_OR_LOSE ("G_TYPE_INVALID);\n}\n\n");
+         if (is_noreply) {
+           if (!write_printf_to_iochannel ("  dbus_g_proxy_call_no_reply (proxy, \"%s\", ", channel, error,
+                                           method_info_get_name (method)))
+             goto io_lose;
+           
+           if (!write_args_for_direction (interface, method, channel, ARG_IN, error))
+             goto io_lose;
+           
+           WRITE_OR_LOSE ("G_TYPE_INVALID, ");
+           
+           if (!write_args_for_direction (interface, method, channel, ARG_OUT, error))
+             goto io_lose;
+           
+           WRITE_OR_LOSE ("G_TYPE_INVALID);\n");
+           
+           WRITE_OR_LOSE ("  return TRUE;\n}\n\n");
+         } else {
+           if (!write_printf_to_iochannel ("  return dbus_g_proxy_call (proxy, \"%s\", ", channel, error,
+                                           method_info_get_name (method)))
+             goto io_lose;
+           
+           WRITE_OR_LOSE ("error, ");
+           
+           if (!write_args_for_direction (interface, method, channel, ARG_IN, error))
+             goto io_lose;
+           
+           WRITE_OR_LOSE ("G_TYPE_INVALID, ");
+           
+           if (!write_args_for_direction (interface, method, channel, ARG_OUT, error))
+             goto io_lose;
+           
+           WRITE_OR_LOSE ("G_TYPE_INVALID);\n}\n\n");
+         }
 
          write_async_method_client (channel, interface, method, error);
        }
index bbb54f7..83f00a2 100644 (file)
@@ -10,7 +10,7 @@
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This program is distributed in the hope that it bwill be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
@@ -29,6 +29,7 @@ G_BEGIN_DECLS
 #define DBUS_GLIB_ANNOTATION_ASYNC "org.freedesktop.DBus.GLib.Async"
 #define DBUS_GLIB_ANNOTATION_CONST "org.freedesktop.DBus.GLib.Const"
 #define DBUS_GLIB_ANNOTATION_RETURNVAL "org.freedesktop.DBus.GLib.ReturnVal"
+#define DBUS_GLIB_ANNOTATION_NOREPLY "org.freedesktop.DBus.Method.NoReply"
 
 gboolean dbus_binding_tool_output_glib_client (BaseInfo *info, GIOChannel *channel, gboolean ignore_unsupported, GError **error);
 gboolean dbus_binding_tool_output_glib_server (BaseInfo *info, GIOChannel *channel, const char *prefix, GError **error);