* Boston, MA 02111-1307, USA.
*/
+#include <string.h>
#include <droute/droute.h>
#include "common/spi-dbus.h"
}
void
-spi_dbus_append_name_and_path (DBusMessage *message, DBusMessageIter *iter, AtkObject *obj, gboolean unref)
+spi_dbus_append_name_and_path (DBusMessage *message, DBusMessageIter *iter, AtkObject *obj, gboolean do_register, gboolean unref)
{
gchar *path;
DBusMessageIter iter_struct;
- const char *bus_name = dbus_message_get_sender (message);
+ const char *bus_name = dbus_bus_get_unique_name (atk_adaptor_app_data->bus);
- path = atk_dbus_object_to_path (obj, FALSE);
+ path = atk_dbus_object_to_path (obj, do_register);
if (!path)
path = g_strdup (SPI_DBUS_PATH_NULL);
if (reply)
{
DBusMessageIter iter;
- dbus_message_iter_init_append (message, &iter);
- spi_dbus_append_name_and_path (message, &iter, obj, unref);
+ dbus_message_iter_init_append (reply, &iter);
+ spi_dbus_append_name_and_path (message, &iter, obj, do_register, unref);
}
return reply;
dbus_bool_t
spi_dbus_return_v_object (DBusMessageIter *iter, AtkObject *obj, int unref)
{
+ DBusMessageIter iter_variant;
char *path;
path = atk_dbus_object_to_path (obj, FALSE);
if (unref)
g_object_unref (obj);
- return droute_return_v_object (iter, path);
+ dbus_message_iter_open_container (iter, DBUS_TYPE_VARIANT, "(so)", &iter_variant);
+ spi_dbus_append_name_and_path_inner (&iter_variant, NULL, path);
+ dbus_message_iter_close_container (iter, &iter_variant);
}
/*---------------------------------------------------------------------------*/
g_object_unref(G_OBJECT(child));
}
}
+#ifdef __ATK_PLUG_H__
+ if (ATK_IS_SOCKET (obj) && atk_socket_is_occupied (ATK_SOCKET(obj)))
+ {
+ AtkSocket *socket = ATK_SOCKET(obj);
+ gchar *child_name, *child_path;
+ child_name = g_strdup (socket->embedded_plug_id);
+ child_path = strchr (child_name + 1, ':');
+ if (child_path)
+ {
+ *(child_path++) = '\0';
+ spi_dbus_append_name_and_path_inner (&iter_sub_array, child_name, child_path);
+ }
+ g_free (child_name);
+ }
+#endif
+
dbus_message_iter_close_container (&iter_struct, &iter_sub_array);
/* Marshall interfaces */