[evince] page-cache: Add flags parameter to ev_page_cache_mark_dirty()



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]