]> www.fi.muni.cz Git - evince.git/blobdiff - libdocument/ev-image.c
[dualscreen] fix crash on ctrl+w and fix control window closing
[evince.git] / libdocument / ev-image.c
index 4276dd482a0fd63969c74ee6e9e1c894d43256c7..fcbbd7d00e7ee85d0abf8a4d13c623a023b06fc0 100644 (file)
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include <config.h>
+
 #include <glib/gstdio.h>
+#include <unistd.h>
+
 #include "ev-document-misc.h"
 #include "ev-file-helpers.h"
 #include "ev-image.h"
@@ -46,7 +49,11 @@ ev_image_finalize (GObject *object)
        }
 
        if (image->priv->tmp_uri) {
-               ev_tmp_filename_unlink (image->priv->tmp_uri);
+               gchar *filename;
+
+               filename = g_filename_from_uri (image->priv->tmp_uri, NULL, NULL);
+               ev_tmp_filename_unlink (filename);
+               g_free (filename);
                g_free (image->priv->tmp_uri);
                image->priv->tmp_uri = NULL;
        }
@@ -128,6 +135,8 @@ ev_image_save_tmp (EvImage   *image,
                   GdkPixbuf *pixbuf)
 {
        GError *error = NULL;
+       gchar  *filename = NULL;
+        int fd;
        
        g_return_val_if_fail (EV_IS_IMAGE (image), NULL);
        g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
@@ -135,18 +144,30 @@ ev_image_save_tmp (EvImage   *image,
        if (image->priv->tmp_uri)
                return image->priv->tmp_uri;
 
-       image->priv->tmp_uri = ev_tmp_filename ("image");
-       gdk_pixbuf_save (pixbuf, image->priv->tmp_uri,
+       if ((fd = ev_mkstemp ("image.XXXXXX.png", &filename, &error)) == -1)
+               goto had_error;
+
+       gdk_pixbuf_save (pixbuf, filename,
                         "png", &error,
                         "compression", "3", NULL);
-       if (!error)
+        close (fd);
+
+       if (!error) {
+               image->priv->tmp_uri = g_filename_to_uri (filename, NULL, &error);
+                if (image->priv->tmp_uri == NULL)
+                        goto had_error;
+
+               g_free (filename);
+               
                return image->priv->tmp_uri;
+       }
+
+    had_error:
 
        /* Erro saving image */
-       g_warning (error->message);
+       g_warning ("Error saving image: %s", error->message);
        g_error_free (error);
-       g_free (image->priv->tmp_uri);
-       image->priv->tmp_uri = NULL;
+       g_free (filename);
 
        return NULL;
 }
@@ -158,44 +179,3 @@ ev_image_get_tmp_uri (EvImage *image)
 
        return image->priv->tmp_uri;
 }
-
-/* EvImageMapping */
-static void
-ev_image_mapping_free_foreach (EvImageMapping *mapping)
-{
-       g_object_unref (mapping->image);
-       g_free (mapping);
-}
-
-void
-ev_image_mapping_free (GList *image_mapping)
-{
-       if (!image_mapping)
-               return;
-
-       g_list_foreach (image_mapping, (GFunc) ev_image_mapping_free_foreach, NULL);
-       g_list_free (image_mapping);
-}
-
-EvImage *
-ev_image_mapping_find (GList   *image_mapping,
-                      gdouble  x,
-                      gdouble  y)
-{
-       GList *list;
-
-       for (list = image_mapping; list; list = list->next) {
-               EvImageMapping *mapping = list->data;
-
-               if ((x >= mapping->x1) &&
-                   (y >= mapping->y1) &&
-                   (x <= mapping->x2) &&
-                   (y <= mapping->y2)) {
-                       return mapping->image;
-               }
-       }
-
-       return NULL;
-}
-
-