From: Nickolay V. Shmyrev Date: Sun, 18 Dec 2005 22:44:42 +0000 (+0000) Subject: Rework selection job info logic and fix critical warning. X-Git-Tag: EVINCE_0_5_0~59 X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=commitdiff_plain;h=8bb96fa1230a8d32043a091c8f10da0fcff6580f;p=evince.git Rework selection job info logic and fix critical warning. * shell/ev-pixbuf-cache.c: (dispose_cache_job_info), (job_finished_cb), (new_selection_pixbuf_needed), (ev_pixbuf_cache_get_selection_pixbuf), (update_job_selection), (clear_job_selection), (ev_pixbuf_cache_set_selection_list): Rework selection job info logic and fix critical warning. --- diff --git a/ChangeLog b/ChangeLog index 2f8708df..e9777fbd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-12-19 Nickolay V. Shmyrev + + * shell/ev-pixbuf-cache.c: (dispose_cache_job_info), + (job_finished_cb), (new_selection_pixbuf_needed), + (ev_pixbuf_cache_get_selection_pixbuf), (update_job_selection), + (clear_job_selection), (ev_pixbuf_cache_set_selection_list): + + Rework selection job info logic and fix critical warning. + 2005-12-17 Abel Cheung * configure.ac: Added "cy" "fa" "mk" "vi" to ALL_LINGUAS. diff --git a/shell/ev-pixbuf-cache.c b/shell/ev-pixbuf-cache.c index 47951069..f363e700 100644 --- a/shell/ev-pixbuf-cache.c +++ b/shell/ev-pixbuf-cache.c @@ -13,11 +13,13 @@ typedef struct _CacheJobInfo GList *link_mapping; GdkRegion *text_mapping; - /* Selection data. If the *_points structs are unset, we put -1 in x1. - * selection_points are the coordinates encapsulated in selection. + /* Selection data. + * Selection_points are the coordinates encapsulated in selection. * target_points is the target selection size. */ EvRectangle selection_points; EvRectangle target_points; + gboolean points_set; + GdkPixbuf *selection; GdkRegion *selection_region; } CacheJobInfo; @@ -167,8 +169,7 @@ dispose_cache_job_info (CacheJobInfo *job_info, job_info->rc = NULL; } - job_info->selection_points.x1 = -1; - job_info->target_points.x1 = -1; + job_info->points_set = FALSE; } static void @@ -210,7 +211,6 @@ job_finished_cb (EvJob *job, { CacheJobInfo *job_info; EvJobRender *job_render = EV_JOB_RENDER (job); - GdkPixbuf *pixbuf; /* If the job is outside of our interest, we silently discard it */ if ((job_render->rc->page < (pixbuf_cache->start_page - pixbuf_cache->preload_cache_size)) || @@ -680,7 +680,7 @@ new_selection_pixbuf_needed (EvPixbufCache *pixbuf_cache, height != gdk_pixbuf_get_height (job_info->selection)) return TRUE; } else { - if (job_info->target_points.x1 >= 0) + if (job_info->points_set) return TRUE; } return FALSE; @@ -787,7 +787,7 @@ ev_pixbuf_cache_get_selection_pixbuf (EvPixbufCache *pixbuf_cache, return NULL; /* No selection on this page */ - if (job_info->target_points.x1 < 0) + if (!job_info->points_set) return NULL; /* Update the rc */ @@ -851,16 +851,14 @@ static void update_job_selection (CacheJobInfo *job_info, EvViewSelection *selection) { - if (job_info->selection == NULL) - job_info->selection_points.x1 = -1; + job_info->points_set = TRUE; job_info->target_points = selection->rect; } static void clear_job_selection (CacheJobInfo *job_info) { - job_info->selection_points.x1 = -1; - job_info->target_points.x1 = -1; + job_info->points_set = FALSE; if (job_info->selection) { g_object_unref (job_info->selection); @@ -884,6 +882,9 @@ ev_pixbuf_cache_set_selection_list (EvPixbufCache *pixbuf_cache, g_return_if_fail (EV_IS_PIXBUF_CACHE (pixbuf_cache)); + if (!EV_IS_SELECTION (pixbuf_cache->document)) + return; + page_cache = ev_page_cache_get (pixbuf_cache->document); /* We check each area to see what needs updating, and what needs freeing; */