X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=backend%2Fev-page-cache.c;h=a6d78228b5d82d455cad9de47a1e7cd2470ad822;hb=bf325e9279324f02bcadc0145cd553ed94c23d2d;hp=7960cb43be9535670bd439f74b7fd3d89b72be81;hpb=5e6728daa9b09a76f2537f7c848123639165cd70;p=evince.git diff --git a/backend/ev-page-cache.c b/backend/ev-page-cache.c index 7960cb43..a6d78228 100644 --- a/backend/ev-page-cache.c +++ b/backend/ev-page-cache.c @@ -51,7 +51,7 @@ G_DEFINE_TYPE (EvPageCache, ev_page_cache, G_TYPE_OBJECT) static void ev_page_cache_init (EvPageCache *page_cache) { - page_cache->current_page = 0; + page_cache->current_page = -1; } static void @@ -89,22 +89,30 @@ ev_page_cache_finalize (GObject *object) EvPageCache * _ev_page_cache_new (EvDocument *document) { + EvDocumentInfo *doc_info; EvPageCache *page_cache; EvPageCacheInfo *info; gint i; page_cache = (EvPageCache *) g_object_new (EV_TYPE_PAGE_CACHE, NULL); - g_mutex_lock (EV_DOC_MUTEX); + ev_document_doc_mutex_lock (); /* We read page information out of the document */ /* Assume all pages are the same size until proven otherwise */ page_cache->uniform = TRUE; page_cache->n_pages = ev_document_get_n_pages (document); - page_cache->title = ev_document_get_title (document); page_cache->page_labels = g_new0 (char *, page_cache->n_pages); + doc_info = ev_document_get_info (document); + if (doc_info->fields_mask & EV_DOCUMENT_INFO_TITLE) { + page_cache->title = g_strdup (doc_info->title); + } else { + page_cache->title = NULL; + } + g_free (doc_info); + for (i = 0; i < page_cache->n_pages; i++) { double page_width = 0; double page_height = 0; @@ -123,17 +131,17 @@ _ev_page_cache_new (EvDocument *document) page_cache->size_cache = g_new0 (EvPageCacheInfo, page_cache->n_pages); - for (j = 1; j < i; j++) { - info = &(page_cache->size_cache [j - 1]); - info->width = page_width; - info->height = page_height; + for (j = 0; j < i; j++) { + info = &(page_cache->size_cache [j]); + info->width = page_cache->uniform_width; + info->height = page_cache->uniform_height; } page_cache->uniform = FALSE; } if (! page_cache->uniform) { - info = &(page_cache->size_cache [i - 1]); + info = &(page_cache->size_cache [i]); info->width = page_width; info->height = page_height; @@ -141,13 +149,13 @@ _ev_page_cache_new (EvDocument *document) } /* make some sanity check assertions */ - g_assert (page_cache->n_pages > 0); if (! page_cache->uniform) g_assert (page_cache->size_cache != NULL); - if (page_cache->uniform) - g_assert (page_cache->uniform_width > 0 && page_cache->uniform_height > 0); - g_mutex_unlock (EV_DOC_MUTEX); + ev_document_doc_mutex_unlock (); + + if (page_cache->n_pages > 0) + ev_page_cache_set_current_page (page_cache, 0); return page_cache; } @@ -290,7 +298,7 @@ ev_page_cache_next_page (EvPageCache *page_cache) { g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), FALSE); - if (page_cache->current_page > page_cache->n_pages) + if (page_cache->current_page >= page_cache->n_pages - 1) return FALSE; ev_page_cache_set_current_page (page_cache, page_cache->current_page + 1);