JSRetainPtr<JSStringRef> AccessibilityUIElement::url() { if (!ATK_IS_HYPERLINK_IMPL(m_element.get())) return JSStringCreateWithCharacters(0, 0); AtkHyperlink* hyperlink = atk_hyperlink_impl_get_hyperlink(ATK_HYPERLINK_IMPL(m_element.get())); GOwnPtr<char> hyperlinkURI(atk_hyperlink_get_uri(hyperlink, 0)); // Build the result string, stripping the absolute URL paths if present. char* localURI = g_strstr_len(hyperlinkURI.get(), -1, "LayoutTests"); String axURL = String::format("AXURL: %s", localURI ? localURI : hyperlinkURI.get()); return JSStringCreateWithUTF8CString(axURL.utf8().data()); }
/** * atk_hyperlink_impl_get_hyperlink: * @impl: a #GObject instance that implements AtkHyperlinkImplIface * * Gets the hyperlink associated with this object. * * Returns: (transfer full): an AtkHyperlink object which points to this * implementing AtkObject. * * Since: 1.12 **/ AtkHyperlink * atk_hyperlink_impl_get_hyperlink (AtkHyperlinkImpl *impl) { AtkHyperlinkImplIface *iface; g_return_val_if_fail (impl != NULL, NULL); g_return_val_if_fail (ATK_IS_HYPERLINK_IMPL (impl), NULL); iface = ATK_HYPERLINK_IMPL_GET_IFACE (impl); if (iface->get_hyperlink) { return (iface->get_hyperlink) (impl); } return NULL; }
static AtkHyperlink * get_hyperlink_from_servant (PortableServer_Servant servant) { SpiBase *object = SPI_BASE (bonobo_object_from_servant (servant)); g_return_val_if_fail (object != NULL, NULL); if (ATK_IS_HYPERLINK(object->gobj)) { return ATK_HYPERLINK (object->gobj); } else if (ATK_IS_HYPERLINK_IMPL(object->gobj)) { return atk_hyperlink_impl_get_hyperlink (ATK_HYPERLINK_IMPL (object->gobj)); } else return NULL; }
SpiAccessible * spi_accessible_construct (GType type, AtkObject *o) { SpiAccessible *retval; CORBA_Environment ev; CORBA_exception_init (&ev); g_assert (o); g_assert (g_type_is_a (type, SPI_ACCESSIBLE_TYPE)); if ((retval = g_hash_table_lookup (get_public_refs (), o))) { bonobo_object_ref (BONOBO_OBJECT (retval)); return retval; } else { retval = g_object_new (type, NULL); spi_base_construct (SPI_BASE (retval), G_OBJECT(o)); } g_hash_table_insert (get_public_refs (), o, retval); g_signal_connect (G_OBJECT (retval), "destroy", G_CALLBACK (de_register_public_ref), NULL); /* aggregate appropriate SPI interfaces based on ATK interfaces */ if (ATK_IS_ACTION (o)) { bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT (spi_action_interface_new (o))); } if (ATK_IS_COMPONENT (o)) { bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT (spi_component_interface_new (o))); } if (ATK_IS_EDITABLE_TEXT (o)) { bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT(spi_editable_text_interface_new (o))); } else if (ATK_IS_TEXT (o)) { bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT (spi_text_interface_new (o))); } if (ATK_IS_HYPERTEXT (o)) { bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT (spi_hypertext_interface_new (o))); } if (ATK_IS_IMAGE (o)) { bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT (spi_image_interface_new (o))); } if (ATK_IS_SELECTION (o)) { bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT (spi_selection_interface_new (o))); } if (ATK_IS_TABLE (o)) { bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT (spi_table_interface_new (o))); } if (ATK_IS_VALUE (o)) { bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT (spi_value_interface_new (o))); } if (ATK_IS_STREAMABLE_CONTENT (o)) { bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT (spi_streamable_interface_new (o))); } if (ATK_IS_DOCUMENT (o)) /* We add collection interface to document */ { SpiDocument *doc = spi_document_interface_new (o); bonobo_object_add_interface (BONOBO_OBJECT (doc), BONOBO_OBJECT (spi_collection_interface_new (o))); bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT (doc)); } if (ATK_IS_HYPERLINK_IMPL (o)) { /* !!! the cast below is used instead of the ATK_HYPERLINK macro, since the object 'o' is not really a hyperlink, but is in fact an AtkHyperlinkImpl. Ouch. This works since it gets cast back to GObject, but it's nasty and needs to be cleaned up. */ bonobo_object_add_interface (bonobo_object (retval), BONOBO_OBJECT (spi_hyperlink_new ((AtkHyperlink*)o))); } return retval; }