]> www.fi.muni.cz Git - evince.git/blobdiff - libdocument/ev-document-links.c
[libdocument] Add methods to get page and page label from a link
[evince.git] / libdocument / ev-document-links.c
index 7b31c4d4173458c9d534fd9b2cbc2f90e7b18284..48dde7fcdf2aa17acdfde78bf92c4d536a8ffc6c 100644 (file)
@@ -54,16 +54,13 @@ ev_document_links_get_links_model (EvDocumentLinks *document_links)
        return retval;
 }
 
-GList *
+EvMappingList *
 ev_document_links_get_links (EvDocumentLinks *document_links,
                             EvPage          *page)
 {
        EvDocumentLinksInterface *iface = EV_DOCUMENT_LINKS_GET_IFACE (document_links);
-       GList *retval;
 
-       retval = iface->get_links (document_links, page);
-
-       return retval;
+       return iface->get_links (document_links, page);
 }
 
 EvLinkDest *
@@ -130,3 +127,41 @@ ev_document_links_get_dest_page_label (EvDocumentLinks *document_links,
 
        return label;
 }
+
+static EvLinkDest *
+get_link_dest (EvLink *link)
+{
+       EvLinkAction *action;
+
+       action = ev_link_get_action (link);
+       if (!action)
+               return NULL;
+
+       if (ev_link_action_get_action_type (action) !=
+           EV_LINK_ACTION_TYPE_GOTO_DEST)
+               return NULL;
+
+       return ev_link_action_get_dest (action);
+}
+
+gint
+ev_document_links_get_link_page (EvDocumentLinks *document_links,
+                                EvLink          *link)
+{
+       EvLinkDest *dest;
+
+       dest = get_link_dest (link);
+
+       return dest ? ev_document_links_get_dest_page (document_links, dest) : -1;
+}
+
+gchar *
+ev_document_links_get_link_page_label (EvDocumentLinks *document_links,
+                                      EvLink          *link)
+{
+       EvLinkDest *dest;
+
+       dest = get_link_dest (link);
+
+       return dest ? ev_document_links_get_dest_page_label (document_links, dest) : NULL;
+}