Removed the extra boolean parameter added to know when to unref the
[platform/core/uifw/at-spi2-atk.git] / atk-adaptor / object.c
index 33c50d9..3511682 100644 (file)
  * This function will simply look for all the accessibles that the cache object
  * has not found and assume that they need to be leased.
  */
-static void
-maybe_lease (AtkObject *obj)
+void
+spi_object_lease_if_needed (GObject *obj)
 {
-  if (!spi_cache_in (spi_global_cache, G_OBJECT (obj)))
+  if (!spi_cache_in (spi_global_cache, obj))
     {
-      spi_leasing_take (spi_global_leasing, G_OBJECT (obj));
+      spi_leasing_take (spi_global_leasing, obj);
     }
 }
 
@@ -101,7 +101,38 @@ spi_object_append_reference (DBusMessageIter * iter, AtkObject * obj)
     return;
   }
 
-  maybe_lease (obj);
+  spi_object_lease_if_needed (G_OBJECT (obj));
+
+  name = dbus_bus_get_unique_name (spi_global_app_data->bus);
+  path = spi_register_object_to_path (spi_global_register, G_OBJECT (obj));
+
+  if (!path)
+    path = g_strdup (SPI_DBUS_PATH_NULL);
+
+  dbus_message_iter_open_container (iter, DBUS_TYPE_STRUCT, NULL,
+                                    &iter_struct);
+  dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &name);
+  dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_OBJECT_PATH, &path);
+  dbus_message_iter_close_container (iter, &iter_struct);
+  
+  g_free (path);
+}
+
+/* TODO: Perhaps combine with spi_object_append_reference.  Leaving separate
+ * for now in case we want to use a different path for hyperlinks. */
+void
+spi_hyperlink_append_reference (DBusMessageIter * iter, AtkHyperlink * obj)
+{
+  DBusMessageIter iter_struct;
+  const gchar *name;
+  gchar *path;
+
+  if (!obj) {
+    spi_object_append_null_reference (iter);
+    return;
+  }
+
+  spi_object_lease_if_needed (G_OBJECT (obj));
 
   name = dbus_bus_get_unique_name (spi_global_app_data->bus);
   path = spi_register_object_to_path (spi_global_register, G_OBJECT (obj));
@@ -155,7 +186,24 @@ spi_object_return_reference (DBusMessage * msg, AtkObject * obj)
       dbus_message_iter_init_append (reply, &iter);
       spi_object_append_reference (&iter, obj);
     }
-  g_object_unref (G_OBJECT (obj));
+
+  return reply;
+}
+
+DBusMessage *
+spi_hyperlink_return_reference (DBusMessage * msg, AtkHyperlink * obj)
+{
+  DBusMessage *reply;
+
+  reply = dbus_message_new_method_return (msg);
+  if (reply)
+    {
+      DBusMessageIter iter;
+      dbus_message_iter_init_append (reply, &iter);
+      spi_hyperlink_append_reference (&iter, obj);
+    }
+  if (obj)
+    g_object_unref (G_OBJECT (obj));
 
   return reply;
 }
@@ -176,6 +224,12 @@ spi_object_append_interfaces (DBusMessageIter * iter, AtkObject * obj)
       dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf);
     }
 
+  if (atk_object_get_role (obj) == ATK_ROLE_APPLICATION)
+    {
+      itf = SPI_DBUS_INTERFACE_APPLICATION;
+      dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf);
+    }
+
   if (ATK_IS_COMPONENT (obj))
     {
       itf = SPI_DBUS_INTERFACE_COMPONENT;