X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=djvu%2Fdjvu-document.c;h=ad18555960a6332d7720dc2e686b4f9ceb495d64;hb=aad2f2781f45397fbaf5aa3a263bab15ff39136a;hp=e50fb8f48b93a699f0f8291f997fca6c494def48;hpb=2fcdb759f53fee8ccca7eaa3d67743cc8d42b0fc;p=evince.git diff --git a/djvu/djvu-document.c b/djvu/djvu-document.c index e50fb8f4..ad185559 100644 --- a/djvu/djvu-document.c +++ b/djvu/djvu-document.c @@ -19,12 +19,15 @@ #include "djvu-document.h" #include "djvu-text.h" +#include "djvu-links.h" #include "djvu-document-private.h" #include "ev-document-thumbnails.h" #include "ev-document-misc.h" #include "ev-document-find.h" +#include "ev-document-links.h" #include +#include #include #include #include @@ -47,6 +50,7 @@ typedef struct _DjvuDocumentClass DjvuDocumentClass; static void djvu_document_document_iface_init (EvDocumentIface *iface); static void djvu_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); static void djvu_document_find_iface_init (EvDocumentFindIface *iface); +static void djvu_document_document_links_iface_init (EvDocumentLinksIface *iface); G_DEFINE_TYPE_WITH_CODE (DjvuDocument, djvu_document, G_TYPE_OBJECT, @@ -54,6 +58,7 @@ G_DEFINE_TYPE_WITH_CODE G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT, djvu_document_document_iface_init); G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS, djvu_document_document_thumbnails_iface_init) G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_FIND, djvu_document_find_iface_init); + G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_LINKS, djvu_document_document_links_iface_init); }); @@ -142,10 +147,14 @@ djvu_document_get_page_size (EvDocument *document, { DjvuDocument *djvu_document = DJVU_DOCUMENT (document); ddjvu_pageinfo_t info; + ddjvu_status_t r; g_return_if_fail (djvu_document->d_document); - while (ddjvu_document_get_pageinfo(djvu_document->d_document, page, &info) < DDJVU_JOB_OK) + while ((r = ddjvu_document_get_pageinfo(djvu_document->d_document, page, &info)) < DDJVU_JOB_OK) + djvu_handle_events(djvu_document, TRUE); + + if (r >= DDJVU_JOB_FAILED) djvu_handle_events(djvu_document, TRUE); *width = info.width * SCALE_FACTOR; @@ -451,3 +460,19 @@ djvu_document_find_iface_init (EvDocumentFindIface *iface) iface->get_progress = djvu_document_find_get_progress; iface->cancel = djvu_document_find_cancel; } + +static GList * +djvu_document_links_get_links (EvDocumentLinks *document_links, + gint page) +{ + return djvu_links_get_links (document_links, page, SCALE_FACTOR); +} + +static void +djvu_document_document_links_iface_init (EvDocumentLinksIface *iface) +{ + iface->has_document_links = djvu_links_has_document_links; + iface->get_links_model = djvu_links_get_links_model; + iface->get_links = djvu_document_links_get_links; + iface->find_link_dest = djvu_links_find_link_dest; +}