]> www.fi.muni.cz Git - evince.git/blobdiff - libdocument/ev-document-links.c
[dualscreen] fix crash on ctrl+w and fix control window closing
[evince.git] / libdocument / ev-document-links.c
index b8aae5d71a5ac424671c6336e4b5567276350e89..b8dc1f23fff91d04db72c902e70641635b434bcd 100644 (file)
@@ -77,6 +77,20 @@ ev_document_links_find_link_dest (EvDocumentLinks *document_links,
        return retval;
 }
 
+gint
+ev_document_links_find_link_page (EvDocumentLinks *document_links,
+                                 const gchar     *link_name)
+{
+       EvDocumentLinksInterface *iface = EV_DOCUMENT_LINKS_GET_IFACE (document_links);
+       gint retval;
+
+       ev_document_doc_mutex_lock ();
+       retval = iface->find_link_page (document_links, link_name);
+       ev_document_doc_mutex_unlock ();
+
+       return retval;
+}
+
 /* Helper functions */
 gint
 ev_document_links_get_dest_page (EvDocumentLinks *document_links,
@@ -86,14 +100,8 @@ ev_document_links_get_dest_page (EvDocumentLinks *document_links,
 
        switch (ev_link_dest_get_dest_type (dest)) {
        case EV_LINK_DEST_TYPE_NAMED: {
-               EvLinkDest *dest2;
-
-               dest2 = ev_document_links_find_link_dest (document_links,
-                                                         ev_link_dest_get_named_dest (dest));
-               if (dest2) {
-                       page = ev_link_dest_get_page (dest2);
-                       g_object_unref (dest2);
-               }
+               page = ev_document_links_find_link_page (document_links,
+                                                        ev_link_dest_get_named_dest (dest));
        }
                break;
        case EV_LINK_DEST_TYPE_PAGE_LABEL:
@@ -127,3 +135,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;
+}