]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-jobs.c
Fixed wrong translation.
[evince.git] / shell / ev-jobs.c
index d61185c0c90b07851cd33cd7d51458c7a2081461..1218cd063314451300fc05f90a9622c76a93b9cc 100644 (file)
@@ -32,13 +32,18 @@ static void ev_job_load_class_init  (EvJobLoadClass      *class);
 static void ev_job_print_init           (EvJobPrint          *job);
 static void ev_job_print_class_init     (EvJobPrintClass     *class);
 
 static void ev_job_print_init           (EvJobPrint          *job);
 static void ev_job_print_class_init     (EvJobPrintClass     *class);
 
-enum
-{
+enum {
        FINISHED,
        LAST_SIGNAL
 };
 
        FINISHED,
        LAST_SIGNAL
 };
 
+enum {
+       PAGE_READY,
+       RENDER_LAST_SIGNAL
+};
+
 static guint job_signals[LAST_SIGNAL] = { 0 };
 static guint job_signals[LAST_SIGNAL] = { 0 };
+static guint job_render_signals[RENDER_LAST_SIGNAL] = { 0 };
 
 G_DEFINE_TYPE (EvJob, ev_job, G_TYPE_OBJECT)
 G_DEFINE_TYPE (EvJobLinks, ev_job_links, EV_TYPE_JOB)
 
 G_DEFINE_TYPE (EvJob, ev_job, G_TYPE_OBJECT)
 G_DEFINE_TYPE (EvJobLinks, ev_job_links, EV_TYPE_JOB)
@@ -152,6 +157,15 @@ ev_job_render_class_init (EvJobRenderClass *class)
 
        oclass = G_OBJECT_CLASS (class);
 
 
        oclass = G_OBJECT_CLASS (class);
 
+       job_render_signals [PAGE_READY] =
+               g_signal_new ("page-ready",
+                             EV_TYPE_JOB_RENDER,
+                             G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (EvJobRenderClass, page_ready),
+                             NULL, NULL,
+                             g_cclosure_marshal_VOID__VOID,
+                             G_TYPE_NONE, 0);
+
        oclass->dispose = ev_job_render_dispose;
 }
 
        oclass->dispose = ev_job_render_dispose;
 }
 
@@ -312,10 +326,30 @@ render_finished_cb (EvDocument      *document,
 
        /* FIXME: ps backend should be ported to cairo */
        job->surface = ev_document_misc_surface_from_pixbuf (pixbuf);
 
        /* FIXME: ps backend should be ported to cairo */
        job->surface = ev_document_misc_surface_from_pixbuf (pixbuf);
+       job->page_ready = TRUE;
+       g_signal_emit (job, job_render_signals[PAGE_READY], 0);
        EV_JOB (job)->finished = TRUE;
        ev_job_finished (EV_JOB (job));
 }
 
        EV_JOB (job)->finished = TRUE;
        ev_job_finished (EV_JOB (job));
 }
 
+static gboolean
+notify_page_ready (EvJobRender *job)
+{
+       g_signal_emit (job, job_render_signals[PAGE_READY], 0);
+
+       return FALSE;
+}
+
+static void
+ev_job_render_page_ready (EvJobRender *job)
+{
+       job->page_ready = TRUE;
+       g_idle_add_full (G_PRIORITY_HIGH_IDLE,
+                        (GSourceFunc)notify_page_ready,
+                        g_object_ref (job),
+                        (GDestroyNotify)g_object_unref);
+}
+
 void
 ev_job_render_run (EvJobRender *job)
 {
 void
 ev_job_render_run (EvJobRender *job)
 {
@@ -333,23 +367,6 @@ ev_job_render_run (EvJobRender *job)
                ev_document_fc_mutex_lock ();
                
                job->surface = ev_document_render (EV_JOB (job)->document, job->rc);
                ev_document_fc_mutex_lock ();
                
                job->surface = ev_document_render (EV_JOB (job)->document, job->rc);
-
-               if (job->include_links && EV_IS_DOCUMENT_LINKS (EV_JOB (job)->document))
-                       job->link_mapping =
-                               ev_document_links_get_links (EV_DOCUMENT_LINKS (EV_JOB (job)->document),
-                                                            job->rc->page);
-               if (job->include_images && EV_IS_DOCUMENT_IMAGES (EV_JOB (job)->document))
-                       job->image_mapping =
-                               ev_document_images_get_images (EV_DOCUMENT_IMAGES (EV_JOB (job)->document),
-                                                              job->rc->page);
-               if (job->include_forms && EV_IS_DOCUMENT_FORMS (EV_JOB (job)->document))
-                       job->form_field_mapping =
-                               ev_document_forms_get_form_fields (EV_DOCUMENT_FORMS (EV_JOB(job)->document),
-                                                                  job->rc->page);
-               if (job->include_text && EV_IS_SELECTION (EV_JOB (job)->document))
-                       job->text_mapping =
-                               ev_selection_get_selection_map (EV_SELECTION (EV_JOB (job)->document),
-                                                               job->rc);
                if (job->include_selection && EV_IS_SELECTION (EV_JOB (job)->document)) {
                        ev_selection_render_selection (EV_SELECTION (EV_JOB (job)->document),
                                                       job->rc,
                if (job->include_selection && EV_IS_SELECTION (EV_JOB (job)->document)) {
                        ev_selection_render_selection (EV_SELECTION (EV_JOB (job)->document),
                                                       job->rc,
@@ -362,8 +379,27 @@ ev_job_render_run (EvJobRender *job)
                                                                   job->rc,
                                                                   &(job->selection_points));
                }
                                                                   job->rc,
                                                                   &(job->selection_points));
                }
+
+               ev_job_render_page_ready (job);
                
                ev_document_fc_mutex_unlock ();
                
                ev_document_fc_mutex_unlock ();
+               
+               if (job->include_text && EV_IS_SELECTION (EV_JOB (job)->document))
+                       job->text_mapping =
+                               ev_selection_get_selection_map (EV_SELECTION (EV_JOB (job)->document),
+                                                               job->rc);
+               if (job->include_links && EV_IS_DOCUMENT_LINKS (EV_JOB (job)->document))
+                       job->link_mapping =
+                               ev_document_links_get_links (EV_DOCUMENT_LINKS (EV_JOB (job)->document),
+                                                            job->rc->page);
+               if (job->include_forms && EV_IS_DOCUMENT_FORMS (EV_JOB (job)->document))
+                       job->form_field_mapping =
+                               ev_document_forms_get_form_fields (EV_DOCUMENT_FORMS (EV_JOB(job)->document),
+                                                                  job->rc->page);
+               if (job->include_images && EV_IS_DOCUMENT_IMAGES (EV_JOB (job)->document))
+                       job->image_mapping =
+                               ev_document_images_get_images (EV_DOCUMENT_IMAGES (EV_JOB (job)->document),
+                                                              job->rc->page);
                EV_JOB (job)->finished = TRUE;
        }
 
                EV_JOB (job)->finished = TRUE;
        }
 
@@ -531,6 +567,7 @@ ev_job_print_new (EvDocument    *document,
                  EvPrintRange  *ranges,
                  gint           n_ranges,
                  EvPrintPageSet page_set,
                  EvPrintRange  *ranges,
                  gint           n_ranges,
                  EvPrintPageSet page_set,
+                 gint           pages_per_sheet,
                  gint           copies,
                  gdouble        collate,
                  gdouble        reverse)
                  gint           copies,
                  gdouble        collate,
                  gdouble        reverse)
@@ -553,6 +590,8 @@ ev_job_print_new (EvDocument    *document,
        job->n_ranges = n_ranges;
 
        job->page_set = page_set;
        job->n_ranges = n_ranges;
 
        job->page_set = page_set;
+
+       job->pages_per_sheet = pages_per_sheet;
        
        job->copies = copies;
        job->collate = collate;
        
        job->copies = copies;
        job->collate = collate;
@@ -680,6 +719,7 @@ ev_job_print_run (EvJobPrint *job)
        fc.paper_width = job->width;
        fc.paper_height = job->height;
        fc.duplex = FALSE;
        fc.paper_width = job->width;
        fc.paper_height = job->height;
        fc.duplex = FALSE;
+       fc.pages_per_sheet = job->pages_per_sheet;
 
        ev_document_doc_mutex_lock ();
        ev_file_exporter_begin (EV_FILE_EXPORTER (document), &fc);
 
        ev_document_doc_mutex_lock ();
        ev_file_exporter_begin (EV_FILE_EXPORTER (document), &fc);