From 9b0445a3b8162f7d36c7407d77d7d410d45ac6e3 Mon Sep 17 00:00:00 2001 From: Nickolay V. Shmyrev Date: Sun, 27 Aug 2006 20:06:18 +0000 Subject: Don't clear link mapping on copy_job_to_job_info. Fixes bug 346168. 2006-08-28 Nickolay V. Shmyrev * shell/ev-pixbuf-cache.c: (copy_job_to_job_info): Don't clear link mapping on copy_job_to_job_info. Fixes bug 346168. --- (limited to 'shell/ev-pixbuf-cache.c') diff --git a/shell/ev-pixbuf-cache.c b/shell/ev-pixbuf-cache.c index fff1249..1d0c528 100644 --- a/shell/ev-pixbuf-cache.c +++ b/shell/ev-pixbuf-cache.c @@ -396,33 +396,61 @@ copy_job_to_job_info (EvJobRender *job_render, CacheJobInfo *job_info, EvPixbufCache *pixbuf_cache) { - GdkPixbuf *pixbuf; - EvRenderContext *rc; - pixbuf = g_object_ref (job_render->pixbuf); - rc = g_object_ref (job_render->rc); + job_info->points_set = FALSE; - dispose_cache_job_info (job_info, pixbuf_cache); + if (job_info->pixbuf) { + g_object_unref (G_OBJECT (job_info->pixbuf)); + } + job_info->pixbuf = g_object_ref (job_render->pixbuf); - job_info->pixbuf = pixbuf; - job_info->rc = rc; - - if (job_render->link_mapping) + if (job_info->rc) { + g_object_unref (G_OBJECT (job_info->rc)); + } + job_info->rc = g_object_ref (job_render->rc); + + if (job_render->include_links) { + if (job_info->link_mapping) + ev_link_mapping_free (job_info->link_mapping); job_info->link_mapping = job_render->link_mapping; - if (job_render->text_mapping) - job_info->text_mapping = job_render->text_mapping; + } + + if (job_render->include_text) { + if (job_info->text_mapping) + gdk_region_destroy (job_info->text_mapping); + job_info->text_mapping = job_render->text_mapping; + } + if (job_render->include_selection) { - pixbuf = g_object_ref (job_render->selection); + + if (job_info->selection) { + g_object_unref (G_OBJECT (job_info->selection)); + job_info->selection = NULL; + } + if (job_info->selection_region) { + gdk_region_destroy (job_info->selection_region); + job_info->selection_region = NULL; + } + job_info->selection_points = job_render->selection_points; job_info->selection_region = gdk_region_copy (job_render->selection_region); - job_info->selection = pixbuf; + job_info->selection = g_object_ref (job_render->selection); g_assert (job_info->selection_points.x1 >= 0); } + if (job_info->job) { + g_signal_handlers_disconnect_by_func (job_info->job, + G_CALLBACK (job_finished_cb), + pixbuf_cache); + ev_job_queue_remove_job (job_info->job); + g_object_unref (G_OBJECT (job_info->job)); + job_info->job = NULL; + } + } -static CacheJobInfo * +static CacheJobInfo* find_job_cache (EvPixbufCache *pixbuf_cache, int page) { -- cgit v0.9.1