X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=libview%2Fev-jobs.c;h=816a56bbb3c7987351291af6d82f778eb0c41243;hb=ab0edaffd2f1790ec8ac7ac17f90e0a8007b92cd;hp=3e33886f7f4a761f029544dffe26abd88a803eeb;hpb=6ac3eb8adb9f4bb8c59c832e7d83334243d90cd5;p=evince.git diff --git a/libview/ev-jobs.c b/libview/ev-jobs.c index 3e33886f..816a56bb 100644 --- a/libview/ev-jobs.c +++ b/libview/ev-jobs.c @@ -216,7 +216,7 @@ ev_job_run (EvJob *job) void ev_job_cancel (EvJob *job) { - if (job->cancelled || (job->finished && job->idle_finished_id == 0)) + if (job->cancelled) return; ev_debug_message (DEBUG_JOBS, "job %s (%p) cancelled", EV_GET_TYPE_NAME (job), job); @@ -225,6 +225,10 @@ ev_job_cancel (EvJob *job) /* This should never be called from a thread */ job->cancelled = TRUE; g_cancellable_cancel (job->cancellable); + + if (job->finished && job->idle_finished_id == 0) + return; + g_signal_emit (job, job_signals[CANCELLED], 0); } @@ -331,6 +335,38 @@ ev_job_links_dispose (GObject *object) (* G_OBJECT_CLASS (ev_job_links_parent_class)->dispose) (object); } +static gboolean +fill_page_labels (GtkTreeModel *tree_model, + GtkTreePath *path, + GtkTreeIter *iter, + EvJob *job) +{ + EvDocumentLinks *document_links; + EvLink *link; + gchar *page_label; + + gtk_tree_model_get (tree_model, iter, + EV_DOCUMENT_LINKS_COLUMN_LINK, &link, + -1); + + if (!link) + return FALSE; + + document_links = EV_DOCUMENT_LINKS (job->document); + page_label = ev_document_links_get_link_page_label (document_links, link); + if (!page_label) + return FALSE; + + gtk_tree_store_set (GTK_TREE_STORE (tree_model), iter, + EV_DOCUMENT_LINKS_COLUMN_PAGE_LABEL, page_label, + -1); + + g_free (page_label); + g_object_unref (link); + + return FALSE; +} + static gboolean ev_job_links_run (EvJob *job) { @@ -342,7 +378,9 @@ ev_job_links_run (EvJob *job) ev_document_doc_mutex_lock (); job_links->model = ev_document_links_get_links_model (EV_DOCUMENT_LINKS (job->document)); ev_document_doc_mutex_unlock (); - + + gtk_tree_model_foreach (job_links->model, (GtkTreeModelForeachFunc)fill_page_labels, job); + ev_job_succeeded (job); return FALSE; @@ -780,7 +818,8 @@ ev_job_thumbnail_run (EvJob *job) g_object_unref (rc); ev_document_doc_mutex_unlock (); - job_thumb->thumbnail = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf); + if (pixbuf) + job_thumb->thumbnail = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf); g_object_unref (pixbuf); ev_job_succeeded (job); @@ -1521,6 +1560,9 @@ ev_job_print_run (EvJob *job) ev_document_doc_mutex_unlock (); + if (g_cancellable_is_cancelled (job->cancellable)) + return FALSE; + cr_status = cairo_status (job_print->cr); if (cr_status == CAIRO_STATUS_SUCCESS) { ev_job_succeeded (job);