]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-jobs.c
Give priority to forms over text to set the cursor.
[evince.git] / shell / ev-jobs.c
index 6ad4dfcaa876e5a4f64ed7e59c9ecaf20809883b..0f0a0daf18b1d2ddae82cb9314dcd45ffbea5bbf 100644 (file)
@@ -3,7 +3,9 @@
 #include "ev-document-thumbnails.h"
 #include "ev-document-links.h"
 #include "ev-document-images.h"
+#include "ev-document-forms.h"
 #include "ev-document-factory.h"
+#include "ev-document-misc.h"
 #include "ev-file-helpers.h"
 #include "ev-document-fonts.h"
 #include "ev-selection.h"
@@ -120,9 +122,9 @@ ev_job_render_dispose (GObject *object)
 
        job = EV_JOB_RENDER (object);
 
-       if (job->pixbuf) {
-               g_object_unref (job->pixbuf);
-               job->pixbuf = NULL;
+       if (job->surface) {
+               cairo_surface_destroy (job->surface);
+               job->surface = NULL;
        }
 
        if (job->rc) {
@@ -131,7 +133,7 @@ ev_job_render_dispose (GObject *object)
        }
 
        if (job->selection) {
-               g_object_unref (job->selection);
+               cairo_surface_destroy (job->selection);
                job->selection = NULL;
        }
 
@@ -264,6 +266,7 @@ ev_job_render_new (EvDocument      *document,
                   EvRectangle     *selection_points,
                   GdkColor        *text,
                   GdkColor        *base,
+                  gboolean         include_forms,
                   gboolean         include_links,
                   gboolean         include_images,
                   gboolean         include_text,
@@ -283,6 +286,7 @@ ev_job_render_new (EvDocument      *document,
        job->target_height = height;
        job->text = *text;
        job->base = *base;
+       job->include_forms = include_forms;
        job->include_links = include_links;
        job->include_images = include_images;
        job->include_text = include_text;
@@ -299,13 +303,16 @@ ev_job_render_new (EvDocument      *document,
 }
 
 static void
-render_finished_cb (EvDocument *document, GdkPixbuf *pixbuf, EvJobRender *job)
+render_finished_cb (EvDocument      *document,
+                   GdkPixbuf       *pixbuf,
+                   EvJobRender     *job)
 {
        g_signal_handlers_disconnect_by_func (EV_JOB (job)->document,
                                              render_finished_cb, job);
 
+       /* FIXME: ps backend should be ported to cairo */
+       job->surface = ev_document_misc_surface_from_pixbuf (pixbuf);
        EV_JOB (job)->finished = TRUE;
-       job->pixbuf = g_object_ref (pixbuf);
        ev_job_finished (EV_JOB (job));
 }
 
@@ -325,7 +332,8 @@ ev_job_render_run (EvJobRender *job)
        } else {
                ev_document_fc_mutex_lock ();
                
-               job->pixbuf = ev_document_render_pixbuf (EV_JOB (job)->document, job->rc);
+               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),
@@ -334,6 +342,10 @@ ev_job_render_run (EvJobRender *job)
                        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),