diff options
author | Michael Albinus <michael.albinus@gmx.de> | 2009-08-16 17:35:44 +0000 |
---|---|---|
committer | Michael Albinus <michael.albinus@gmx.de> | 2009-08-16 17:35:44 +0000 |
commit | ca4f31ea158896bcca9020b15489340df6ccba38 (patch) | |
tree | 7d353d49e2b09c45b6dd9e774dc7ac660245fb3b /src/dbusbind.c | |
parent | 556594956bdd178569ea6e1fe0b5c3034be0f3a1 (diff) |
* dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Diffstat (limited to 'src/dbusbind.c')
-rw-r--r-- | src/dbusbind.c | 41 |
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); |