summaryrefslogtreecommitdiff
path: root/libview/ev-page-cache.c
diff options
context:
space:
mode:
authorCarlos Garcia Campos <[email protected]>2014-08-15 13:04:53 +0200
committerraveit65 <[email protected]>2017-08-28 16:04:01 +0200
commitc284fdd869066085c756f617ac6787abe06769c6 (patch)
tree468921bf6298c0810cd3b8a4d4bc4d3b55d87d3d /libview/ev-page-cache.c
parent3ada385fead55fa8f94afa128558348d8530dee6 (diff)
downloadatril-c284fdd869066085c756f617ac6787abe06769c6.tar.bz2
atril-c284fdd869066085c756f617ac6787abe06769c6.tar.xz
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. origin commit: https://git.gnome.org/browse/evince/commit/?h=gnome-3-14&id=20c6b3b
Diffstat (limited to 'libview/ev-page-cache.c')
-rw-r--r--libview/ev-page-cache.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/libview/ev-page-cache.c b/libview/ev-page-cache.c
index a3a2b6fd..b7c5e8aa 100644
--- a/libview/ev-page-cache.c
+++ b/libview/ev-page-cache.c
@@ -342,8 +342,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;
@@ -352,6 +353,27 @@ 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);
+
/* Update the current range */
ev_page_cache_set_page_range (cache, cache->start_page, cache->end_page);
}