summaryrefslogtreecommitdiff
path: root/droute
diff options
context:
space:
mode:
authorMike Gorse <mgorse@novell.com>2012-03-05 17:20:19 -0600
committerMike Gorse <mgorse@novell.com>2012-03-05 17:54:05 -0600
commita110d6bf5aac4a11541521c568d9a8f85aecca05 (patch)
tree9af2558d9d4e5f3a1460e84527c36497719e519b /droute
parentcc1ba3203a74c36a41a21e8dad1fb3ccc338d62a (diff)
downloadat-spi2-atk-a110d6bf5aac4a11541521c568d9a8f85aecca05.tar.gz
Have DoAction send the reply message *before* invoking atk
In the past, a gtk button's do_action handler added an idle to invoke the button and then returned, but now the idle has been removed, and the do_action call activates the button directly, meaning that, if the button invokes a dialogue, then atk_action_do_action will not return until the dialog closes. So, to be safe, we need to send a reply before invoking atk. This means that atk's return value gets ignored, although it was somewhat meaningless in gtk's case anyhow. This required that droute's behavior be changed so that, if a handler does not return a message, droute will now assume that the handler already sent a reply, rather than synthesizing a default empty reply. Thus, handlers are now required to return a value DBusMessage. Perhaps the API should really be asynchronous, with a callback to be invoked when the action finishes.
Diffstat (limited to 'droute')
-rw-r--r--droute/droute.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/droute/droute.c b/droute/droute.c
index 9212e4d..1567fc7 100644
--- a/droute/droute.c
+++ b/droute/droute.c
@@ -537,16 +537,15 @@ handle_other (DBusConnection *bus,
else
reply = (func) (bus, message, datum);
- if (!reply)
+ /* All D-Bus method calls must have a reply.
+ * If one is not provided presume that the caller has already
+ * sent one.
+ */
+ if (reply)
{
- /* All D-Bus method calls must have a reply.
- * If one is not provided presume that the call has a void
- * return and no error has occured.
- */
- reply = dbus_message_new_method_return (message);
+ dbus_connection_send (bus, reply, NULL);
+ dbus_message_unref (reply);
}
- dbus_connection_send (bus, reply, NULL);
- dbus_message_unref (reply);
result = DBUS_HANDLER_RESULT_HANDLED;
}