summaryrefslogtreecommitdiff
path: root/src/dbusbind.c
diff options
context:
space:
mode:
authorMichael Albinus <michael.albinus@gmx.de>2009-08-16 17:35:44 +0000
committerMichael Albinus <michael.albinus@gmx.de>2009-08-16 17:35:44 +0000
commitca4f31ea158896bcca9020b15489340df6ccba38 (patch)
tree7d353d49e2b09c45b6dd9e774dc7ac660245fb3b /src/dbusbind.c
parent556594956bdd178569ea6e1fe0b5c3034be0f3a1 (diff)
* dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Diffstat (limited to 'src/dbusbind.c')
-rw-r--r--src/dbusbind.c41
1 files changed, 29 insertions, 12 deletions
diff --git a/src/dbusbind.c b/src/dbusbind.c
index cde4dba3a2..a38a994400 100644
--- a/src/dbusbind.c
+++ b/src/dbusbind.c
@@ -967,7 +967,8 @@ object path SERVICE is registered at. INTERFACE is an interface
offered by SERVICE. It must provide METHOD.
HANDLER is a Lisp function, which is called when the corresponding
-return message has arrived.
+return message has arrived. If HANDLER is nil, no return message will
+be expected.
If the parameter `:timeout' is given, the following integer TIMEOUT
specifies the maximun number of milliseconds the method call must
@@ -987,7 +988,7 @@ converted into D-Bus types via the following rules:
All arguments can be preceded by a type symbol. For details about
type symbols, see Info node `(dbus)Type Conversion'.
-The function returns a key into the hash table
+Unless HANDLER is nil, the function returns a key into the hash table
`dbus-registered-functions-table'. The corresponding entry in the
hash table is removed, when the return message has been arrived, and
HANDLER is called.
@@ -1032,7 +1033,7 @@ usage: (dbus-call-method-asynchronously BUS SERVICE PATH INTERFACE METHOD HANDLE
CHECK_STRING (path);
CHECK_STRING (interface);
CHECK_STRING (method);
- if (!FUNCTIONP (handler))
+ if (!NILP (handler) && !FUNCTIONP (handler))
wrong_type_argument (intern ("functionp"), handler);
GCPRO6 (bus, service, path, interface, method, handler);
@@ -1091,18 +1092,34 @@ usage: (dbus-call-method-asynchronously BUS SERVICE PATH INTERFACE METHOD HANDLE
xd_append_arg (dtype, args[i], &iter);
}
- /* Send the message. The message is just added to the outgoing
- message queue. */
- if (!dbus_connection_send_with_reply (connection, dmessage, NULL, timeout))
- XD_SIGNAL1 (build_string ("Cannot send message"));
+ if (!NILP (handler))
+ {
+ /* Send the message. The message is just added to the outgoing
+ message queue. */
+ if (!dbus_connection_send_with_reply (connection, dmessage,
+ NULL, timeout))
+ XD_SIGNAL1 (build_string ("Cannot send message"));
- XD_DEBUG_MESSAGE ("Message sent");
+ /* The result is the key in Vdbus_registered_functions_table. */
+ result = (list2 (bus, make_number (dbus_message_get_serial (dmessage))));
+
+ /* Create a hash table entry. */
+ Fputhash (result, handler, Vdbus_registered_functions_table);
+ }
+ else
+ {
+ /* Send the message. The message is just added to the outgoing
+ message queue. */
+ if (!dbus_connection_send (connection, dmessage, NULL))
+ XD_SIGNAL1 (build_string ("Cannot send message"));
- /* The result is the key in Vdbus_registered_functions_table. */
- result = (list2 (bus, make_number (dbus_message_get_serial (dmessage))));
+ result = Qnil;
+ }
- /* Create a hash table entry. */
- Fputhash (result, handler, Vdbus_registered_functions_table);
+ /* Flush connection to ensure the message is handled. */
+ dbus_connection_flush (connection);
+
+ XD_DEBUG_MESSAGE ("Message sent");
/* Cleanup. */
dbus_message_unref (dmessage);