* AT-SPI - Assistive Technology Service Provider Interface
* (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
*
- * Copyright 2001 Sun Microsystems Inc.
+ * Copyright 2001, 2002 Sun Microsystems Inc.,
+ * Copyright 2001, 2002 Ximian, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
#include <config.h>
#include <stdio.h>
#include <libspi/hyperlink.h>
+#include <libspi/action.h>
#include <libspi/accessible.h>
/* Static function declarations */
BONOBO_TYPE_FUNC_FULL (SpiHyperlink,
Accessibility_Hyperlink,
SPI_TYPE_BASE,
- spi_hyperlink);
+ spi_hyperlink)
static void
SpiHyperlink *
-spi_hyperlink_new (AtkObject *object)
+spi_hyperlink_new (AtkHyperlink *object)
{
SpiHyperlink *new_hyperlink = g_object_new (
SPI_HYPERLINK_TYPE, NULL);
- spi_base_construct (SPI_BASE (new_hyperlink), object);
+ spi_base_construct (SPI_BASE (new_hyperlink), G_OBJECT(object));
+ /*
+ * some hyperlinks are actionable... this is an ATK convention
+ * that seems convenient though possibly poorly documented or unintended.
+ */
+ if (ATK_IS_ACTION (object))
+ {
+ /*
+ * NOTE: we don't cast 'object' to ATK_OBJECT in the call to
+ * spi_action_interface_new(), because of the above convention,
+ * even though it means we may be violating the func prototype.
+ * See discussion in bugzilla bug #120659.
+ * !!!
+ * IMPORTANT! The 'AtkObject' typecast, instead of the cast macro,
+ * is used below, because 'object' may NOT really be an AtkObject;
+ * it will be cast back to a G_OBJECT inside spi_action_interface_new
+ * before use, so this is OK though very ropey coding style.
+ */
+ bonobo_object_add_interface (bonobo_object (new_hyperlink),
+ BONOBO_OBJECT (spi_action_interface_new ((AtkObject *) object)));
+ }
return new_hyperlink;
}
-
static AtkHyperlink *
get_hyperlink_from_servant (PortableServer_Servant servant)
{
SpiBase *object = SPI_BASE (bonobo_object_from_servant (servant));
- if (!object)
- {
- return NULL;
- }
-
- return ATK_HYPERLINK (object->atko);
+ g_return_val_if_fail (object != NULL, NULL);
+ g_return_val_if_fail (ATK_IS_HYPERLINK(object->gobj), NULL);
+ return ATK_HYPERLINK (object->gobj);
}
g_return_val_if_fail (link != NULL, 0);
- return (CORBA_short) atk_hyperlink_get_n_anchors (link);
+ return atk_hyperlink_get_n_anchors (link);
}
g_return_val_if_fail (link != NULL, -1);
- return (CORBA_long) atk_hyperlink_get_start_index (link);
+ return atk_hyperlink_get_start_index (link);
}
g_return_val_if_fail (link != NULL, -1);
- return (CORBA_long) atk_hyperlink_get_end_index (link);
+ return atk_hyperlink_get_end_index (link);
}
g_return_val_if_fail (link != NULL, CORBA_string_dup (""));
- uri = atk_hyperlink_get_uri (link, (gint) i);
+ uri = atk_hyperlink_get_uri (link, i);
if (uri)
{
rv = CORBA_string_dup (uri);
g_return_val_if_fail (link != NULL, CORBA_OBJECT_NIL);
- atk_object = atk_hyperlink_get_object (link, (gint) i);
+ atk_object = atk_hyperlink_get_object (link, i);
return spi_accessible_new_return (atk_object, FALSE, ev);
}
g_return_val_if_fail (link != NULL, TRUE);
- return (CORBA_boolean) atk_hyperlink_is_valid (link);
+ return atk_hyperlink_is_valid (link);
}