diff options
Diffstat (limited to 'libdocument')
-rw-r--r-- | libdocument/ev-document.c | 28 | ||||
-rw-r--r-- | libdocument/ev-document.h | 5 |
2 files changed, 31 insertions, 2 deletions
diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c index 19d51d9b..588d0d89 100644 --- a/libdocument/ev-document.c +++ b/libdocument/ev-document.c @@ -26,6 +26,7 @@ #include "ev-document.h" #include "synctex_parser.h" +#include "ev-file-helpers.h" #define EV_DOCUMENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EV_TYPE_DOCUMENT, EvDocumentPrivate)) @@ -141,6 +142,8 @@ ev_document_init (EvDocument *document) /* Assume all pages are the same size until proven otherwise */ document->priv->uniform = TRUE; + /* Assume that the document is not a web document*/ + document->iswebdocument = FALSE ; } static void @@ -237,6 +240,14 @@ ev_document_load (EvDocument *document, gboolean retval; GError *err = NULL; + /* + * Hardcoding a check for ePub documents, cause it needs a web document DOM + * and webkit, support for any other web document types can be added similarly. + */ + + if ( !g_strcmp0 (ev_file_get_mime_type(uri,TRUE,&err),"application/epub+zip") ) + document->iswebdocument=TRUE ; + retval = klass->load (document, uri, &err); if (!retval) { if (err) { @@ -258,16 +269,28 @@ ev_document_load (EvDocument *document, /* Cache some info about the document to avoid * going to the backends since it requires locks */ + priv->uri = g_strdup (uri); - priv->n_pages = _ev_document_get_n_pages (document); + priv->n_pages = _ev_document_get_n_pages (document); + for (i = 0; i < priv->n_pages; i++) { + + /* + * Since there is no sense of paging in an ePub,it makes no sense to have pages sizes. + * We are however geeneralising the scenario by considering epub as a type of web document. + * FIXME: Labels, or bookmarks though, can be done. + */ + if ( document->iswebdocument == TRUE ) + break; + EvPage *page = ev_document_get_page (document, i); gdouble page_width = 0; gdouble page_height = 0; EvPageSize *page_size; gchar *page_label; - + + _ev_document_get_page_size (document, page, &page_width, &page_height); if (i == 0) { @@ -277,6 +300,7 @@ ev_document_load (EvDocument *document, priv->max_height = priv->uniform_height; priv->min_width = priv->uniform_width; priv->min_height = priv->uniform_height; + } else if (priv->uniform && (priv->uniform_width != page_width || priv->uniform_height != page_height)) { diff --git a/libdocument/ev-document.h b/libdocument/ev-document.h index d10d261a..940c7c80 100644 --- a/libdocument/ev-document.h +++ b/libdocument/ev-document.h @@ -85,6 +85,11 @@ struct _EvDocument GObject base; EvDocumentPrivate *priv; + /* + * Since we can only access the members of this structure from the window frontend, + * we need a flag to detemine whether to replace the atril-view with a web-view. + */ + gboolean iswebdocument; }; struct _EvDocumentClass |