[evince] page-cache: Add flags parameter to ev_page_cache_mark_dirty()
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] page-cache: Add flags parameter to ev_page_cache_mark_dirty()
- Date: Fri, 15 Aug 2014 11:06:11 +0000 (UTC)
commit 20c6b3ba43c4133e0e538ae398b7bbe67ab3d188
Author: Carlos Garcia Campos <carlosgc gnome org>
Date: Fri Aug 15 13:04:53 2014 +0200
page-cache: Add flags parameter to ev_page_cache_mark_dirty()
This allows to specify what is dirty so that it's freed before being
cached again.
libview/ev-page-cache.c | 36 ++++++++++++++++++++++++++++++++++--
libview/ev-page-cache.h | 3 ++-
libview/ev-view.c | 4 ++--
3 files changed, 38 insertions(+), 5 deletions(-)
---
diff --git a/libview/ev-page-cache.c b/libview/ev-page-cache.c
index 6d2312f..fdb31b2 100644
--- a/libview/ev-page-cache.c
+++ b/libview/ev-page-cache.c
@@ -401,8 +401,9 @@ ev_page_cache_set_flags (EvPageCache *cache,
}
void
-ev_page_cache_mark_dirty (EvPageCache *cache,
- gint page)
+ev_page_cache_mark_dirty (EvPageCache *cache,
+ gint page,
+ EvJobPageDataFlags flags)
{
EvPageCacheData *data;
@@ -411,6 +412,37 @@ ev_page_cache_mark_dirty (EvPageCache *cache,
data = &cache->page_list[page];
data->dirty = TRUE;
+ if (flags & EV_PAGE_DATA_INCLUDE_LINKS)
+ g_clear_pointer (&data->link_mapping, ev_mapping_list_unref);
+
+ if (flags & EV_PAGE_DATA_INCLUDE_IMAGES)
+ g_clear_pointer (&data->image_mapping, ev_mapping_list_unref);
+
+ if (flags & EV_PAGE_DATA_INCLUDE_FORMS)
+ g_clear_pointer (&data->form_field_mapping, ev_mapping_list_unref);
+
+ if (flags & EV_PAGE_DATA_INCLUDE_ANNOTS)
+ g_clear_pointer (&data->annot_mapping, ev_mapping_list_unref);
+
+ if (flags & EV_PAGE_DATA_INCLUDE_TEXT_MAPPING)
+ g_clear_pointer (&data->text_mapping, cairo_region_destroy);
+
+ if (flags & EV_PAGE_DATA_INCLUDE_TEXT)
+ g_clear_pointer (&data->text, g_free);
+
+ if (flags & EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT) {
+ g_clear_pointer (&data->text_layout, g_free);
+ data->text_layout_length = 0;
+ }
+
+ if (flags & EV_PAGE_DATA_INCLUDE_TEXT_ATTRS)
+ g_clear_pointer (&data->text_attrs, pango_attr_list_unref);
+
+ if (flags & EV_PAGE_DATA_INCLUDE_TEXT_LOG_ATTRS) {
+ g_clear_pointer (&data->text_log_attrs, g_free);
+ data->text_log_attrs_length = 0;
+ }
+
/* Update the current range */
ev_page_cache_set_page_range (cache, cache->start_page, cache->end_page);
}
diff --git a/libview/ev-page-cache.h b/libview/ev-page-cache.h
index 904898c..70ee06e 100644
--- a/libview/ev-page-cache.h
+++ b/libview/ev-page-cache.h
@@ -51,7 +51,8 @@ EvJobPageDataFlags ev_page_cache_get_flags (EvPageCache *cach
void ev_page_cache_set_flags (EvPageCache *cache,
EvJobPageDataFlags flags);
void ev_page_cache_mark_dirty (EvPageCache *cache,
- gint page);
+ gint page,
+ EvJobPageDataFlags flags);
EvMappingList *ev_page_cache_get_link_mapping (EvPageCache *cache,
gint page);
EvMappingList *ev_page_cache_get_image_mapping (EvPageCache *cache,
diff --git a/libview/ev-view.c b/libview/ev-view.c
index d79d758..fadeeae 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -3194,7 +3194,7 @@ ev_view_create_annotation (EvView *view,
/* If the page didn't have annots, mark the cache as dirty */
if (!ev_page_cache_get_annot_mapping (view->page_cache, view->current_page))
- ev_page_cache_mark_dirty (view->page_cache, view->current_page);
+ ev_page_cache_mark_dirty (view->page_cache, view->current_page, EV_PAGE_DATA_INCLUDE_ANNOTS);
if (EV_IS_ANNOTATION_MARKUP (annot)) {
GtkWindow *parent;
@@ -3285,7 +3285,7 @@ ev_view_remove_annotation (EvView *view,
annot);
ev_document_doc_mutex_unlock ();
- ev_page_cache_mark_dirty (view->page_cache, page);
+ ev_page_cache_mark_dirty (view->page_cache, page, EV_PAGE_DATA_INCLUDE_ANNOTS);
/* FIXME: only redraw the annot area */
ev_view_reload_page (view, page, NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]