]> www.fi.muni.cz Git - evince.git/blobdiff - backend/pdf/ev-poppler.cc
[xps] Fix internal links that point to a source that is not a document
[evince.git] / backend / pdf / ev-poppler.cc
index bf1fed5ada84166b8d8b534a7a91c37809fd7ac7..d68c7b173a97219f9fe2d2f9231bbfffba5e6e4b 100644 (file)
@@ -1258,36 +1258,7 @@ build_tree (PdfDocument      *pdf_document,
                if (!action)
                        continue;
 
-               switch (action->type) {
-                       case POPPLER_ACTION_GOTO_DEST: {
-                               /* For bookmarks, solve named destinations */
-                               if (action->goto_dest.dest->type == POPPLER_DEST_NAMED) {
-                                       PopplerDest *dest;
-                                       EvLinkDest *ev_dest = NULL;
-                                       EvLinkAction *ev_action;
-                                       
-                                       dest = poppler_document_find_dest (pdf_document->document,
-                                                                          action->goto_dest.dest->named_dest);
-                                       if (!dest) {
-                                               link = ev_link_from_action (pdf_document, action);
-                                               break;
-                                       }
-                                       
-                                       ev_dest = ev_link_dest_from_dest (pdf_document, dest);
-                                       poppler_dest_free (dest);
-                                       
-                                       ev_action = ev_link_action_new_dest (ev_dest);
-                                       link = ev_link_new (action->any.title, ev_action);
-                               } else {
-                                       link = ev_link_from_action (pdf_document, action);
-                               }
-                       }
-                               break;
-                       default:
-                               link = ev_link_from_action (pdf_document, action);
-                               break;
-               }
-               
+               link = ev_link_from_action (pdf_document, action);
                if (!link || strlen (ev_link_get_title (link)) <= 0) {
                        poppler_action_free (action);
                        if (link)
@@ -1398,6 +1369,25 @@ pdf_document_links_find_link_dest (EvDocumentLinks  *document_links,
        return ev_dest;
 }
 
+static gint
+pdf_document_links_find_link_page (EvDocumentLinks  *document_links,
+                                  const gchar      *link_name)
+{
+       PdfDocument *pdf_document;
+       PopplerDest *dest;
+       gint         retval = -1;
+
+       pdf_document = PDF_DOCUMENT (document_links);
+       dest = poppler_document_find_dest (pdf_document->document,
+                                          link_name);
+       if (dest) {
+               retval = dest->page_num - 1;
+               poppler_dest_free (dest);
+       }
+
+       return retval;
+}
+
 static void
 pdf_document_document_links_iface_init (EvDocumentLinksInterface *iface)
 {
@@ -1405,6 +1395,7 @@ pdf_document_document_links_iface_init (EvDocumentLinksInterface *iface)
        iface->get_links_model = pdf_document_links_get_links_model;
        iface->get_links = pdf_document_links_get_links;
        iface->find_link_dest = pdf_document_links_find_link_dest;
+       iface->find_link_page = pdf_document_links_find_link_page;
 }
 
 static EvMappingList *