]> www.fi.muni.cz Git - evince.git/blobdiff - tiff/tiff-document.c
Save a copy implemented for various backends.
[evince.git] / tiff / tiff-document.c
index ce4f9ab64bdfa7e26792735fbe218b93f3ee3ccb..cb64678bf95b957d152c4dd9d17b29b2c8b55aef 100644 (file)
 #include "ev-document-thumbnails.h"
 #include "ev-ps-exporter.h"
 
 #include "ev-document-thumbnails.h"
 #include "ev-ps-exporter.h"
 
+#include <libgnomevfs/gnome-vfs-uri.h>
+#include <libgnomevfs/gnome-vfs-utils.h>
+#include <libgnomevfs/gnome-vfs-ops.h>
+#include <libgnomevfs/gnome-vfs-xfer.h>
+
 struct _TiffDocumentClass
 {
   GObjectClass parent_class;
 struct _TiffDocumentClass
 {
   GObjectClass parent_class;
@@ -42,6 +47,8 @@ struct _TiffDocument
   TIFF *tiff;
   gint n_pages;
   TIFF2PSContext *ps_export_ctx;
   TIFF *tiff;
   gint n_pages;
   TIFF2PSContext *ps_export_ctx;
+  
+  gchar *uri;
 };
 
 typedef struct _TiffDocumentClass TiffDocumentClass;
 };
 
 typedef struct _TiffDocumentClass TiffDocumentClass;
@@ -108,6 +115,8 @@ tiff_document_load (EvDocument  *document,
       return FALSE;
     }
   tiff_document->tiff = tiff;
       return FALSE;
     }
   tiff_document->tiff = tiff;
+  g_free (tiff_document->uri);
+  tiff_document->uri = g_strdup (uri);
 
   pop_handlers ();
   return TRUE;
 
   pop_handlers ();
   return TRUE;
@@ -117,8 +126,33 @@ static gboolean
 tiff_document_save (EvDocument  *document,
                      const char  *uri,
                      GError     **error)
 tiff_document_save (EvDocument  *document,
                      const char  *uri,
                      GError     **error)
-{
-       return FALSE;
+{              
+       TiffDocument *tiff_document = TIFF_DOCUMENT (document);
+       GnomeVFSResult result;
+       GnomeVFSURI *source_uri;
+       GnomeVFSURI *target_uri;
+       
+       if (!tiff_document->uri)
+               return FALSE;
+       
+       source_uri = gnome_vfs_uri_new (tiff_document->uri);
+       target_uri = gnome_vfs_uri_new (uri);
+
+       result = 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,
+                                    NULL);
+       gnome_vfs_uri_unref (target_uri);
+       gnome_vfs_uri_unref (source_uri);
+    
+       if (result != GNOME_VFS_OK)
+               g_set_error (error,
+                            EV_DOCUMENT_ERROR,
+                            0,
+                            gnome_vfs_result_to_string (result));                      
+       return (result == GNOME_VFS_OK);
 }
 
 static int
 }
 
 static int
@@ -269,6 +303,7 @@ tiff_document_finalize (GObject *object)
        TiffDocument *tiff_document = TIFF_DOCUMENT (object);
 
        TIFFClose (tiff_document->tiff);
        TiffDocument *tiff_document = TIFF_DOCUMENT (object);
 
        TIFFClose (tiff_document->tiff);
+       g_free (tiff_document->uri);
 
        G_OBJECT_CLASS (tiff_document_parent_class)->finalize (object);
 }
 
        G_OBJECT_CLASS (tiff_document_parent_class)->finalize (object);
 }
@@ -332,7 +367,7 @@ tiff_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
   if (border)
     {
       GdkPixbuf *tmp_pixbuf = pixbuf;
   if (border)
     {
       GdkPixbuf *tmp_pixbuf = pixbuf;
-      pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, tmp_pixbuf);
+      pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, 0, tmp_pixbuf);
       g_object_unref (tmp_pixbuf);
     }
 
       g_object_unref (tmp_pixbuf);
     }