~ubuntu-branches/ubuntu/natty/evince/natty

« back to all changes in this revision

Viewing changes to libview/ev-jobs.c

  • Committer: Bazaar Package Importer
  • Author(s): Robert Ancell
  • Date: 2010-08-17 14:09:13 UTC
  • mfrom: (1.1.61 upstream)
  • Revision ID: james.westby@ubuntu.com-20100817140913-bdnfcoup9o2672li
Tags: 2.31.6.1-0ubuntu1
* New upstream release
* debian/control
  - Build-depend on gnome-common and dh-autoreconf
  - Bump build-depends on libglib2.0-dev, libgtk2.0-dev, libpoppler-glib-dev
  - Add build-depend on libcairo2-dev
  - Drop build-depend on libdbus-glib-1-dev
* debian/evince.install:
  - Install gsettings schemas
* debian/rules:
  - Use autoreconf.mk

Show diffs side-by-side

added added

removed removed

Lines of Context:
36
36
#include "ev-document-print.h"
37
37
#include "ev-document-annotations.h"
38
38
#include "ev-document-attachments.h"
 
39
#include "ev-document-text.h"
39
40
#include "ev-debug.h"
40
41
 
41
42
#include <errno.h>
49
50
static void ev_job_links_class_init       (EvJobLinksClass       *class);
50
51
static void ev_job_attachments_init       (EvJobAttachments      *job);
51
52
static void ev_job_attachments_class_init (EvJobAttachmentsClass *class);
 
53
static void ev_job_annots_init            (EvJobAnnots           *job);
 
54
static void ev_job_annots_class_init      (EvJobAnnotsClass      *class);
52
55
static void ev_job_render_init            (EvJobRender           *job);
53
56
static void ev_job_render_class_init      (EvJobRenderClass      *class);
54
57
static void ev_job_page_data_init         (EvJobPageData         *job);
91
94
G_DEFINE_ABSTRACT_TYPE (EvJob, ev_job, G_TYPE_OBJECT)
92
95
G_DEFINE_TYPE (EvJobLinks, ev_job_links, EV_TYPE_JOB)
93
96
G_DEFINE_TYPE (EvJobAttachments, ev_job_attachments, EV_TYPE_JOB)
 
97
G_DEFINE_TYPE (EvJobAnnots, ev_job_annots, EV_TYPE_JOB)
94
98
G_DEFINE_TYPE (EvJobRender, ev_job_render, EV_TYPE_JOB)
95
99
G_DEFINE_TYPE (EvJobPageData, ev_job_page_data, EV_TYPE_JOB)
96
100
G_DEFINE_TYPE (EvJobThumbnail, ev_job_thumbnail, EV_TYPE_JOB)
434
438
        return job;
435
439
}
436
440
 
 
441
/* EvJobAnnots */
 
442
static void
 
443
ev_job_annots_init (EvJobAnnots *job)
 
444
{
 
445
        EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
 
446
}
 
447
 
 
448
static void
 
449
ev_job_annots_dispose (GObject *object)
 
450
{
 
451
        EvJobAnnots *job;
 
452
 
 
453
        ev_debug_message (DEBUG_JOBS, NULL);
 
454
 
 
455
        job = EV_JOB_ANNOTS (object);
 
456
 
 
457
        if (job->annots) {
 
458
                g_list_foreach (job->annots, (GFunc)ev_mapping_list_unref, NULL);
 
459
                g_list_free (job->annots);
 
460
                job->annots = NULL;
 
461
        }
 
462
 
 
463
        G_OBJECT_CLASS (ev_job_annots_parent_class)->dispose (object);
 
464
}
 
465
 
 
466
static gboolean
 
467
ev_job_annots_run (EvJob *job)
 
468
{
 
469
        EvJobAnnots *job_annots = EV_JOB_ANNOTS (job);
 
470
        gint         i;
 
471
 
 
472
        ev_debug_message (DEBUG_JOBS, NULL);
 
473
        ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
 
474
 
 
475
        ev_document_doc_mutex_lock ();
 
476
        for (i = 0; i < ev_document_get_n_pages (job->document); i++) {
 
477
                EvMappingList *mapping_list;
 
478
                EvPage        *page;
 
479
 
 
480
                page = ev_document_get_page (job->document, i);
 
481
                mapping_list = ev_document_annotations_get_annotations (EV_DOCUMENT_ANNOTATIONS (job->document),
 
482
                                                                        page);
 
483
                g_object_unref (page);
 
484
 
 
485
                if (mapping_list)
 
486
                        job_annots->annots = g_list_prepend (job_annots->annots, mapping_list);
 
487
        }
 
488
        ev_document_doc_mutex_unlock ();
 
489
 
 
490
        job_annots->annots = g_list_reverse (job_annots->annots);
 
491
 
 
492
        ev_job_succeeded (job);
 
493
 
 
494
        return FALSE;
 
495
}
 
496
 
 
497
static void
 
498
ev_job_annots_class_init (EvJobAnnotsClass *class)
 
499
{
 
500
        GObjectClass *oclass = G_OBJECT_CLASS (class);
 
501
        EvJobClass   *job_class = EV_JOB_CLASS (class);
 
502
 
 
503
        oclass->dispose = ev_job_annots_dispose;
 
504
        job_class->run = ev_job_annots_run;
 
505
}
 
506
 
 
507
EvJob *
 
508
ev_job_annots_new (EvDocument *document)
 
509
{
 
510
        EvJob *job;
 
511
 
 
512
        ev_debug_message (DEBUG_JOBS, NULL);
 
513
 
 
514
        job = g_object_new (EV_TYPE_JOB_ANNOTS, NULL);
 
515
        job->document = g_object_ref (document);
 
516
 
 
517
        return job;
 
518
}
 
519
 
437
520
/* EvJobRender */
438
521
static void
439
522
ev_job_render_init (EvJobRender *job)
461
544
        }
462
545
 
463
546
        if (job->selection_region) {
464
 
                gdk_region_destroy (job->selection_region);
 
547
                cairo_region_destroy (job->selection_region);
465
548
                job->selection_region = NULL;
466
549
        }
467
550
 
593
676
        ev_document_doc_mutex_lock ();
594
677
        ev_page = ev_document_get_page (job->document, job_pd->page);
595
678
 
596
 
        if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_TEXT) && EV_IS_SELECTION (job->document))
 
679
        if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_TEXT_MAPPING) && EV_IS_DOCUMENT_TEXT (job->document))
597
680
                job_pd->text_mapping =
598
 
                        ev_selection_get_selection_map (EV_SELECTION (job->document), ev_page);
 
681
                        ev_document_text_get_text_mapping (EV_DOCUMENT_TEXT (job->document), ev_page);
 
682
        if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_TEXT) && EV_IS_DOCUMENT_TEXT (job->document))
 
683
                job_pd->text =
 
684
                        ev_document_text_get_text (EV_DOCUMENT_TEXT (job->document), ev_page);
 
685
        if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT) && EV_IS_DOCUMENT_TEXT (job->document))
 
686
                ev_document_text_get_text_layout (EV_DOCUMENT_TEXT (job->document),
 
687
                                                  ev_page,
 
688
                                                  &(job_pd->text_layout),
 
689
                                                  &(job_pd->text_layout_length));
599
690
        if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_LINKS) && EV_IS_DOCUMENT_LINKS (job->document))
600
691
                job_pd->link_mapping =
601
692
                        ev_document_links_get_links (EV_DOCUMENT_LINKS (job->document), ev_page);