16
16
* You should have received a copy of the GNU General Public License
17
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21
21
#include <config.h>
23
23
#include "ev-jobs.h"
24
#include "ev-document-thumbnails.h"
25
24
#include "ev-document-links.h"
26
25
#include "ev-document-images.h"
27
26
#include "ev-document-forms.h"
49
49
static void ev_job_links_class_init (EvJobLinksClass *class);
50
50
static void ev_job_attachments_init (EvJobAttachments *job);
51
51
static void ev_job_attachments_class_init (EvJobAttachmentsClass *class);
52
static void ev_job_annots_init (EvJobAnnots *job);
53
static void ev_job_annots_class_init (EvJobAnnotsClass *class);
52
54
static void ev_job_render_init (EvJobRender *job);
53
55
static void ev_job_render_class_init (EvJobRenderClass *class);
54
56
static void ev_job_page_data_init (EvJobPageData *job);
91
93
G_DEFINE_ABSTRACT_TYPE (EvJob, ev_job, G_TYPE_OBJECT)
92
94
G_DEFINE_TYPE (EvJobLinks, ev_job_links, EV_TYPE_JOB)
93
95
G_DEFINE_TYPE (EvJobAttachments, ev_job_attachments, EV_TYPE_JOB)
96
G_DEFINE_TYPE (EvJobAnnots, ev_job_annots, EV_TYPE_JOB)
94
97
G_DEFINE_TYPE (EvJobRender, ev_job_render, EV_TYPE_JOB)
95
98
G_DEFINE_TYPE (EvJobPageData, ev_job_page_data, EV_TYPE_JOB)
96
99
G_DEFINE_TYPE (EvJobThumbnail, ev_job_thumbnail, EV_TYPE_JOB)
214
217
ev_job_cancel (EvJob *job)
216
if (job->cancelled || (job->finished && job->idle_finished_id == 0))
219
222
ev_debug_message (DEBUG_JOBS, "job %s (%p) cancelled", EV_GET_TYPE_NAME (job), job);
222
225
/* This should never be called from a thread */
223
226
job->cancelled = TRUE;
224
227
g_cancellable_cancel (job->cancellable);
229
if (job->finished && job->idle_finished_id == 0)
225
232
g_signal_emit (job, job_signals[CANCELLED], 0);
339
fill_page_labels (GtkTreeModel *tree_model,
344
EvDocumentLinks *document_links;
348
gtk_tree_model_get (tree_model, iter,
349
EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
355
document_links = EV_DOCUMENT_LINKS (job->document);
356
page_label = ev_document_links_get_link_page_label (document_links, link);
360
gtk_tree_store_set (GTK_TREE_STORE (tree_model), iter,
361
EV_DOCUMENT_LINKS_COLUMN_PAGE_LABEL, page_label,
365
g_object_unref (link);
332
371
ev_job_links_run (EvJob *job)
334
373
EvJobLinks *job_links = EV_JOB_LINKS (job);
339
378
ev_document_doc_mutex_lock ();
340
379
job_links->model = ev_document_links_get_links_model (EV_DOCUMENT_LINKS (job->document));
341
380
ev_document_doc_mutex_unlock ();
382
gtk_tree_model_foreach (job_links->model, (GtkTreeModelForeachFunc)fill_page_labels, job);
343
384
ev_job_succeeded (job);
480
ev_job_annots_init (EvJobAnnots *job)
482
EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
486
ev_job_annots_dispose (GObject *object)
490
ev_debug_message (DEBUG_JOBS, NULL);
492
job = EV_JOB_ANNOTS (object);
495
g_list_foreach (job->annots, (GFunc)ev_mapping_list_unref, NULL);
496
g_list_free (job->annots);
500
G_OBJECT_CLASS (ev_job_annots_parent_class)->dispose (object);
504
ev_job_annots_run (EvJob *job)
506
EvJobAnnots *job_annots = EV_JOB_ANNOTS (job);
509
ev_debug_message (DEBUG_JOBS, NULL);
510
ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
512
ev_document_doc_mutex_lock ();
513
for (i = 0; i < ev_document_get_n_pages (job->document); i++) {
514
EvMappingList *mapping_list;
517
page = ev_document_get_page (job->document, i);
518
mapping_list = ev_document_annotations_get_annotations (EV_DOCUMENT_ANNOTATIONS (job->document),
520
g_object_unref (page);
523
job_annots->annots = g_list_prepend (job_annots->annots, mapping_list);
525
ev_document_doc_mutex_unlock ();
527
job_annots->annots = g_list_reverse (job_annots->annots);
529
ev_job_succeeded (job);
535
ev_job_annots_class_init (EvJobAnnotsClass *class)
537
GObjectClass *oclass = G_OBJECT_CLASS (class);
538
EvJobClass *job_class = EV_JOB_CLASS (class);
540
oclass->dispose = ev_job_annots_dispose;
541
job_class->run = ev_job_annots_run;
545
ev_job_annots_new (EvDocument *document)
549
ev_debug_message (DEBUG_JOBS, NULL);
551
job = g_object_new (EV_TYPE_JOB_ANNOTS, NULL);
552
job->document = g_object_ref (document);
437
557
/* EvJobRender */
439
559
ev_job_render_init (EvJobRender *job)
593
713
ev_document_doc_mutex_lock ();
594
714
ev_page = ev_document_get_page (job->document, job_pd->page);
596
if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_TEXT) && EV_IS_SELECTION (job->document))
716
if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_TEXT_MAPPING) && EV_IS_DOCUMENT_TEXT (job->document))
597
717
job_pd->text_mapping =
598
ev_selection_get_selection_map (EV_SELECTION (job->document), ev_page);
718
ev_document_text_get_text_mapping (EV_DOCUMENT_TEXT (job->document), ev_page);
719
if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_TEXT) && EV_IS_DOCUMENT_TEXT (job->document))
721
ev_document_text_get_text (EV_DOCUMENT_TEXT (job->document), ev_page);
722
if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT) && EV_IS_DOCUMENT_TEXT (job->document))
723
ev_document_text_get_text_layout (EV_DOCUMENT_TEXT (job->document),
725
&(job_pd->text_layout),
726
&(job_pd->text_layout_length));
599
727
if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_LINKS) && EV_IS_DOCUMENT_LINKS (job->document))
600
728
job_pd->link_mapping =
601
729
ev_document_links_get_links (EV_DOCUMENT_LINKS (job->document), ev_page);
685
814
rc = ev_render_context_new (page, job_thumb->rotation, job_thumb->scale);
686
815
g_object_unref (page);
688
job_thumb->thumbnail = ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (job->document),
817
pixbuf = ev_document_get_thumbnail (job->document, rc);
690
818
g_object_unref (rc);
691
819
ev_document_doc_mutex_unlock ();
822
job_thumb->thumbnail = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf);
823
g_object_unref (pixbuf);
693
825
ev_job_succeeded (job);
840
972
because, e.g., a password is required - if so, just reload rather than
841
973
creating a new instance */
842
974
if (job->document) {
975
const gchar *uncompressed_uri;
843
977
if (job_load->password) {
844
978
ev_document_security_set_password (EV_DOCUMENT_SECURITY (job->document),
845
979
job_load->password);
848
982
job->failed = FALSE;
849
983
job->finished = FALSE;
850
984
g_clear_error (&job->error);
986
uncompressed_uri = g_object_get_data (G_OBJECT (job->document),
852
988
ev_document_load (job->document,
989
uncompressed_uri ? uncompressed_uri : job_load->uri,
856
992
job->document = ev_document_factory_get_document (job_load->uri,
1085
1221
for (i = 0; i < job->n_pages; i++) {
1086
g_list_foreach (job->pages[i], (GFunc)g_free, NULL);
1222
g_list_foreach (job->pages[i], (GFunc)ev_rectangle_free, NULL);
1087
1223
g_list_free (job->pages[i]);