diff options
Diffstat (limited to 'atk/atkhyperlinkimpl.c')
-rw-r--r-- | atk/atkhyperlinkimpl.c | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/atk/atkhyperlinkimpl.c b/atk/atkhyperlinkimpl.c new file mode 100644 index 0000000000..7021bcf63c --- /dev/null +++ b/atk/atkhyperlinkimpl.c @@ -0,0 +1,108 @@ +/* ATK - Accessibility Toolkit + * Copyright 2006 Sun Microsystems Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include <string.h> +#include "atkhyperlinkimpl.h" + +/** + * SECTION:atkhyperlinkimpl + * @Short_description: An interface from which the AtkHyperlink + * associated with an AtkObject may be obtained. + * @Title:AtkHyperlinImpl + * + * AtkHyperlinkImpl allows AtkObjects to refer to their associated + * AtkHyperlink instance, if one exists. AtkHyperlinkImpl differs + * from AtkHyperlink in that AtkHyperlinkImpl is an interface, whereas + * AtkHyperlink is a object type. The AtkHyperlinkImpl interface + * allows a client to query an AtkObject for the availability of an + * associated AtkHyperlink instance, and obtain that instance. It is + * thus particularly useful in cases where embedded content or inline + * content within a text object is present, since the embedding text + * object implements AtkHypertext and the inline/embedded objects are + * exposed as children which implement AtkHyperlinkImpl, in addition + * to their being obtainable via AtkHypertext:getLink followed by + * AtkHyperlink:getObject. + * + * The AtkHyperlinkImpl interface should be supported by objects + * exposed within the hierarchy as children of an AtkHypertext + * container which correspond to "links" or embedded content within + * the text. HTML anchors are not, for instance, normally exposed + * this way, but embedded images and components which appear inline in + * the content of a text object are. The AtkHyperlinkIface interface + * allows a means of determining which children are hyperlinks in this + * sense of the word, and for obtaining their corresponding + * AtkHyperlink object, from which the embedding range, URI, etc. can + * be obtained. + * + * To some extent this interface exists because, for historical + * reasons, AtkHyperlink was defined as an object type, not an + * interface. Thus, in order to interact with AtkObjects via + * AtkHyperlink semantics, a new interface was required. + */ + +GType +atk_hyperlink_impl_get_type (void) +{ + static GType type = 0; + + if (!type) { + GTypeInfo tinfo = + { + sizeof (AtkHyperlinkImplIface), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + + }; + + type = g_type_register_static (G_TYPE_INTERFACE, "AtkHyperlinkImpl", &tinfo, 0); + } + + return type; +} + +/** + * 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; +} + |