]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-jobs.c
Add --without-libgnome, check for libgnome and libgnomeui separately, and
[evince.git] / shell / ev-jobs.c
index 7c6607563c71228bd7bdb600e1761fdf8e383bc9..6ad4dfcaa876e5a4f64ed7e59c9ecaf20809883b 100644 (file)
@@ -16,7 +16,6 @@
 #include <libgnomevfs/gnome-vfs-uri.h>
 #include <libgnomevfs/gnome-vfs-utils.h>
 #include <libgnomevfs/gnome-vfs-ops.h>
-#include <libgnomevfs/gnome-vfs-xfer.h>
 
 static void ev_job_init                 (EvJob               *job);
 static void ev_job_class_init           (EvJobClass          *class);
@@ -26,8 +25,8 @@ static void ev_job_render_init          (EvJobRender         *job);
 static void ev_job_render_class_init    (EvJobRenderClass    *class);
 static void ev_job_thumbnail_init       (EvJobThumbnail      *job);
 static void ev_job_thumbnail_class_init (EvJobThumbnailClass *class);
-static void ev_job_xfer_init           (EvJobXfer           *job);
-static void ev_job_xfer_class_init     (EvJobXferClass      *class);
+static void ev_job_load_init           (EvJobLoad           *job);
+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);
 
@@ -44,7 +43,7 @@ G_DEFINE_TYPE (EvJobLinks, ev_job_links, EV_TYPE_JOB)
 G_DEFINE_TYPE (EvJobRender, ev_job_render, EV_TYPE_JOB)
 G_DEFINE_TYPE (EvJobThumbnail, ev_job_thumbnail, EV_TYPE_JOB)
 G_DEFINE_TYPE (EvJobFonts, ev_job_fonts, EV_TYPE_JOB)
-G_DEFINE_TYPE (EvJobXfer, ev_job_xfer, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobLoad, ev_job_load, EV_TYPE_JOB)
 G_DEFINE_TYPE (EvJobPrint, ev_job_print, EV_TYPE_JOB)
 
 static void ev_job_init (EvJob *job) { /* Do Nothing */ }
@@ -168,6 +167,11 @@ ev_job_thumbnail_dispose (GObject *object)
                job->thumbnail = NULL;
        }
 
+       if (job->rc) {
+               g_object_unref (job->rc);
+               job->rc = NULL;
+       }
+
        (* G_OBJECT_CLASS (ev_job_thumbnail_parent_class)->dispose) (object);
 }
 
@@ -355,19 +359,15 @@ ev_job_render_run (EvJobRender *job)
 }
 
 EvJob *
-ev_job_thumbnail_new (EvDocument   *document,
-                     gint          page,
-                     int           rotation,
-                     gint          requested_width)
+ev_job_thumbnail_new (EvDocument      *document,
+                     EvRenderContext *rc)
 {
        EvJobThumbnail *job;
 
        job = g_object_new (EV_TYPE_JOB_THUMBNAIL, NULL);
 
        EV_JOB (job)->document = g_object_ref (document);
-       job->page = page;
-       job->rotation = rotation;
-       job->requested_width = requested_width;
+       job->rc = g_object_ref (rc);
 
        return EV_JOB (job);
 }
@@ -381,10 +381,7 @@ ev_job_thumbnail_run (EvJobThumbnail *job)
 
        job->thumbnail =
                ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (EV_JOB (job)->document),
-                                                     job->page,
-                                                     job->rotation,
-                                                     job->requested_width,
-                                                     TRUE);
+                                                     job->rc, TRUE);
        EV_JOB (job)->finished = TRUE;
 
        ev_document_doc_mutex_unlock ();
@@ -425,23 +422,18 @@ ev_job_fonts_run (EvJobFonts *job)
        ev_document_doc_mutex_unlock ();
 }
 
-static void ev_job_xfer_init (EvJobXfer *job) { /* Do Nothing */ }
+static void ev_job_load_init (EvJobLoad *job) { /* Do Nothing */ }
 
 static void
-ev_job_xfer_dispose (GObject *object)
+ev_job_load_dispose (GObject *object)
 {
-       EvJobXfer *job = EV_JOB_XFER (object);
+       EvJobLoad *job = EV_JOB_LOAD (object);
 
        if (job->uri) {
                g_free (job->uri);
                job->uri = NULL;
        }
 
-       if (job->local_uri) {
-               g_free (job->local_uri);
-               job->local_uri = NULL;
-       }
-
        if (job->error) {
                g_error_free (job->error);
                job->error = NULL;
@@ -452,26 +444,26 @@ ev_job_xfer_dispose (GObject *object)
                job->dest = NULL;
        }
 
-       (* G_OBJECT_CLASS (ev_job_xfer_parent_class)->dispose) (object);
+       (* G_OBJECT_CLASS (ev_job_load_parent_class)->dispose) (object);
 }
 
 static void
-ev_job_xfer_class_init (EvJobXferClass *class)
+ev_job_load_class_init (EvJobLoadClass *class)
 {
        GObjectClass *oclass;
 
        oclass = G_OBJECT_CLASS (class);
 
-       oclass->dispose = ev_job_xfer_dispose;
+       oclass->dispose = ev_job_load_dispose;
 }
 
 
 EvJob *
-ev_job_xfer_new (const gchar *uri, EvLinkDest *dest, EvWindowRunMode mode)
+ev_job_load_new (const gchar *uri, EvLinkDest *dest, EvWindowRunMode mode)
 {
-       EvJobXfer *job;
+       EvJobLoad *job;
 
-       job = g_object_new (EV_TYPE_JOB_XFER, NULL);
+       job = g_object_new (EV_TYPE_JOB_LOAD, NULL);
 
        job->uri = g_strdup (uri);
        if (dest)
@@ -483,61 +475,40 @@ ev_job_xfer_new (const gchar *uri, EvLinkDest *dest, EvWindowRunMode mode)
 }
 
 void
-ev_job_xfer_run (EvJobXfer *job)
+ev_job_load_set_uri (EvJobLoad *job, const gchar *uri)
 {
-       GnomeVFSURI *source_uri;
-       GnomeVFSURI *target_uri;
+       if (job->uri)
+               g_free (job->uri);
+       job->uri = g_strdup (uri);
+}
 
-       g_return_if_fail (EV_IS_JOB_XFER (job));
+void
+ev_job_load_run (EvJobLoad *job)
+{
+       g_return_if_fail (EV_IS_JOB_LOAD (job));
        
        if (job->error) {
                g_error_free (job->error);
                job->error = NULL;
        }
+
+       ev_document_fc_mutex_lock ();
        
        /* This job may already have a document even if the job didn't complete
           because, e.g., a password is required - if so, just reload rather than
           creating a new instance */
        if (EV_JOB (job)->document) {
-               ev_document_fc_mutex_lock ();
                ev_document_load (EV_JOB (job)->document,
-                                 job->local_uri ? job->local_uri : job->uri,
+                                 job->uri,
                                  &job->error);
-               ev_document_fc_mutex_unlock ();
-               EV_JOB (job)->finished = TRUE;
-               return;
-       }
-
-       source_uri = gnome_vfs_uri_new (job->uri);
-       if (!gnome_vfs_uri_is_local (source_uri) && !job->local_uri) {
-               char *tmp_name;
-               char *base_name;
-               
-               /* We'd like to keep extension of source uri since
-                * it helps to resolve some mime types, say cbz */
-               
-               tmp_name = ev_tmp_filename (NULL);
-               base_name = gnome_vfs_uri_extract_short_name (source_uri);
-               job->local_uri = g_strconcat ("file:", tmp_name, "-", base_name, NULL);
-               g_free (base_name);
-               g_free (tmp_name);
-               
-               target_uri = gnome_vfs_uri_new (job->local_uri);
-
-               gnome_vfs_xfer_uri (source_uri, target_uri, 
-                                   GNOME_VFS_XFER_DEFAULT | GNOME_VFS_XFER_FOLLOW_LINKS,
-                                   GNOME_VFS_XFER_ERROR_MODE_ABORT,
-                                   GNOME_VFS_XFER_OVERWRITE_MODE_REPLACE,
-                                   NULL,
-                                   job);
-               gnome_vfs_uri_unref (target_uri);
+       } else {
+               EV_JOB(job)->document =
+                       ev_document_factory_get_document (job->uri,
+                                                         &job->error);
        }
-       gnome_vfs_uri_unref (source_uri);
 
-       EV_JOB(job)->document = ev_document_factory_get_document (job->local_uri ? job->local_uri : job->uri, &job->error);
+       ev_document_fc_mutex_unlock ();
        EV_JOB (job)->finished = TRUE;
-
-       return;
 }
 
 EvJob *