diff options
author | infirit <[email protected]> | 2014-12-09 12:57:26 +0100 |
---|---|---|
committer | infirit <[email protected]> | 2014-12-09 23:02:27 +0100 |
commit | 5864915295487d0a040d08dacf2f9fed0fce7537 (patch) | |
tree | bc9a0b740c748c8c324b83b5558427031f705440 /libview | |
parent | 5a5e16ca34aeb8a8ecbb9223413c0340b09de224 (diff) | |
download | atril-5864915295487d0a040d08dacf2f9fed0fce7537.tar.bz2 atril-5864915295487d0a040d08dacf2f9fed0fce7537.tar.xz |
Fill links page labels for the index in the links thread
Getting the page of a named destination requires to take the doc lock,
so it might block the main thread.
Taken from evince commit: b6f2f6c391fa83cb9532e98f561057f022522147
From: Carlos Garcia Campos <[email protected]>
Diffstat (limited to 'libview')
-rw-r--r-- | libview/ev-jobs.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/libview/ev-jobs.c b/libview/ev-jobs.c index 82e32e40..de6a7182 100644 --- a/libview/ev-jobs.c +++ b/libview/ev-jobs.c @@ -347,6 +347,38 @@ ev_job_links_dispose (GObject *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) { EvJobLinks *job_links = EV_JOB_LINKS (job); @@ -357,7 +389,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; |