[Xfce4-commits] <ristretto:master> Clean-up code (end of fase 1)

Stephan Arts noreply at xfce.org
Tue Aug 9 19:38:01 CEST 2011


Updating branch refs/heads/master
         to db13518863fd0ca214d236aa64a5525776606d21 (commit)
       from 0baa638b40c5bdf3bf73c4440625022504680e4c (commit)

commit db13518863fd0ca214d236aa64a5525776606d21
Author: Stephan Arts <stephan at xfce.org>
Date:   Mon Aug 8 22:19:34 2011 +0200

    Clean-up code (end of fase 1)

 src/Makefile.am               |    1 -
 src/gnome_wallpaper_manager.c |    6 +-
 src/gnome_wallpaper_manager.h |    2 +-
 src/image.c                   |  461 -----------
 src/image.h                   |    3 -
 src/image_cache.c             |  214 -----
 src/image_cache.h             |   58 --
 src/image_viewer.c            |   65 +-
 src/image_viewer.h            |   39 +-
 src/main.c                    |    1 -
 src/main_window.c             |  196 ++----
 src/meego_wallpaper_manager.c |    6 +-
 src/meego_wallpaper_manager.h |    2 +-
 src/picture_viewer.c          | 1753 -----------------------------------------
 src/picture_viewer.h          |   95 ---
 src/xfce_wallpaper_manager.c  |    4 +-
 src/xfce_wallpaper_manager.h  |    2 +-
 17 files changed, 138 insertions(+), 2770 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index d979b05..71d2c29 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -3,7 +3,6 @@ bin_PROGRAMS = ristretto
 ristretto_SOURCES = \
 	image_list.c image_list.h \
 	image.c image.h \
-	image_cache.c image_cache.h \
 	image_viewer.c image_viewer.h \
 	settings.c settings.h \
 	preferences_dialog.h preferences_dialog.c \
diff --git a/src/gnome_wallpaper_manager.c b/src/gnome_wallpaper_manager.c
index 1213ccf..803dd00 100644
--- a/src/gnome_wallpaper_manager.c
+++ b/src/gnome_wallpaper_manager.c
@@ -31,8 +31,6 @@
 #include "wallpaper_manager.h"
 #include "gnome_wallpaper_manager.h"
 
-#define XFDESKTOP_SELECTION_FMT "XFDESKTOP_SELECTION_%d"
-
 typedef struct {
     gint16 r;
     gint16 g;
@@ -53,7 +51,7 @@ rstto_gnome_wallpaper_manager_finalize (GObject *object);
 
 static GObjectClass *parent_class = NULL;
 
-static RsttoGnomeWallpaperManager *gnome_wallpaper_manager_object;
+static RsttoWallpaperManager *gnome_wallpaper_manager_object;
 
 struct _RsttoGnomeWallpaperManagerPriv
 {
@@ -209,7 +207,7 @@ rstto_gnome_wallpaper_manager_finalize (GObject *object)
  *
  * Singleton
  */
-RsttoGnomeWallpaperManager *
+RsttoWallpaperManager *
 rstto_gnome_wallpaper_manager_new (void)
 {
     if (gnome_wallpaper_manager_object == NULL)
diff --git a/src/gnome_wallpaper_manager.h b/src/gnome_wallpaper_manager.h
index d6a2d67..9c228a3 100644
--- a/src/gnome_wallpaper_manager.h
+++ b/src/gnome_wallpaper_manager.h
@@ -59,7 +59,7 @@ struct _RsttoGnomeWallpaperManagerClass
     GObjectClass parent_class;
 };
 
-RsttoGnomeWallpaperManager *rstto_gnome_wallpaper_manager_new (void);
+RsttoWallpaperManager *rstto_gnome_wallpaper_manager_new (void);
 GType          rstto_gnome_wallpaper_manager_get_type (void);
 
 G_END_DECLS
diff --git a/src/image.c b/src/image.c
index 09fe562..5ba5576 100644
--- a/src/image.c
+++ b/src/image.c
@@ -27,7 +27,6 @@
 #include <string.h>
 
 #include "image.h"
-#include "image_cache.h"
 
 #ifndef RSTTO_IMAGE_BUFFER_SIZE
 /* #define RSTTO_IMAGE_BUFFER_SIZE 1024 */
@@ -51,20 +50,6 @@ rstto_image_class_init (GObjectClass *);
 static void
 rstto_image_dispose (GObject *object);
 
-static void
-cb_rstto_image_area_prepared (GdkPixbufLoader *loader, RsttoImage *image);
-static void
-cb_rstto_image_size_prepared (GdkPixbufLoader *loader, gint width, gint height, RsttoImage *image);
-static void
-cb_rstto_image_closed (GdkPixbufLoader *loader, RsttoImage *image);
-static gboolean
-cb_rstto_image_update(RsttoImage *image);
-
-static void
-cb_rstto_image_read_file_ready (GObject *source_object, GAsyncResult *result, gpointer user_data);
-static void
-cb_rstto_image_read_input_stream_ready (GObject *source_object, GAsyncResult *result, gpointer user_data);
-
 static GObjectClass *parent_class = NULL;
 
 static gint rstto_image_signals[RSTTO_IMAGE_SIGNAL_COUNT];
@@ -109,13 +94,10 @@ struct _RsttoImagePriv
     /* Image data */
     /**************/
     RsttoImageOrientation orientation;
-    GdkPixbufLoader *loader;
     ExifData *exif_data;
     GdkPixbuf *thumbnail;
-    GdkPixbuf *pixbuf;
     gint       width;
     gint       height;
-    gdouble    scale;
 
     /* Animation data for animated images (like .gif/.mng) */
     /*******************************************************/
@@ -192,7 +174,6 @@ static void
 rstto_image_dispose (GObject *object)
 {
     RsttoImage *image = RSTTO_IMAGE (object);
-    RsttoImageCache *cache;
 
     if(image->priv->cancellable)
     {
@@ -213,33 +194,6 @@ rstto_image_dispose (GObject *object)
         image->priv->animation_timeout_id = 0;
     }
 
-    if (image->priv->loader)
-    {
-        g_signal_handlers_disconnect_by_func (image->priv->loader , cb_rstto_image_area_prepared, image);
-        gdk_pixbuf_loader_close (image->priv->loader, NULL);
-        image->priv->loader = NULL;
-    }
-
-    if (image->priv->animation)
-    {
-        g_object_unref (image->priv->animation);
-        image->priv->animation = NULL;
-    }
-
-    if (image->priv->pixbuf)
-    {
-        g_object_unref (image->priv->pixbuf);
-        image->priv->pixbuf = NULL;
-        cache = rstto_image_cache_new ();
-        rstto_image_cache_pop_image (cache, image);
-    }
-
-    if (image->priv->buffer)
-    {
-        g_free (image->priv->buffer);
-        image->priv->buffer = NULL;
-    }
-
     if (image->priv->exif_data)
     {
         exif_data_free (image->priv->exif_data);
@@ -265,135 +219,12 @@ rstto_image_new (GFile *file)
     image->priv->file = file;
     image->priv->exif_data = NULL;
     image->priv->thumbnail = NULL;
-    image->priv->pixbuf = NULL;
     image->priv->orientation = RSTTO_IMAGE_ORIENT_NOT_DETERMINED;
 
     return image;
 }
 
 
-
-/**
- * rstto_image_load:
- * @image       : The image to load from disk.
- * @empty_cache : if it should empty the cache (eg, perform a reload)
- * @error       : return location for errors or %NULL.
- *
- * If the image is not yet loaded in memory, load the image. 
- * A reload can be forced with @empty_cache set to %TRUE.
- * On failure, returns %FALSE. And @error will be set to 
- * point to a #GError describing the cause of the failure.
- * Warning: this function initializes a load, it is an a-sync call and
- * does not guarantee that the image will be loaded afterwards.
- * the 'image-loaded' signal will indicate that this operation 
- * has finished.
- *
- * Return value: TRUE on success.
- */
-gboolean
-rstto_image_load (RsttoImage *image, gboolean empty_cache, gdouble scale, gboolean preload, GError **error)
-{
-    /* g_debug("%s: %f", __FUNCTION__, scale); */
-    RsttoImageCache *cache;
-
-    g_return_val_if_fail (image != NULL, FALSE);
-
-    cache = rstto_image_cache_new ();
-
-    g_cancellable_reset (image->priv->cancellable);
-
-    /* Image scale */
-    image->priv->scale = scale;
-
-    /* Check if a GIOChannel is present, if so... the load is already in progress */
-    /* The image needs to be loaded if:
-     *   a) The image is already loaded but there is
-     *      a reload required because the cache needs
-     *      to be cleared.
-     *   b) The image is not yet loaded.
-     */
-    if ((image->priv->loader == NULL) && ((empty_cache == TRUE ) || image->priv->pixbuf == NULL))
-    {
-        /* If the image has been loaded, free it */
-        if (image->priv->pixbuf)
-        {
-            g_object_unref (image->priv->pixbuf);
-            image->priv->pixbuf = NULL;
-        }
-        
-        /* FIXME: should we check if the loader already exists? */
-        image->priv->loader = gdk_pixbuf_loader_new();
-
-        /* connect the signal-handlers */
-        g_signal_connect(image->priv->loader, "area-prepared", G_CALLBACK(cb_rstto_image_area_prepared), image);
-        g_signal_connect(image->priv->loader, "size-prepared", G_CALLBACK(cb_rstto_image_size_prepared), image);
-        /*g_signal_connect(image->priv->loader, "area-updated", G_CALLBACK(cb_rstto_image_area_updated), image);*/
-        g_signal_connect(image->priv->loader, "closed", G_CALLBACK(cb_rstto_image_closed), image);
-
-        g_object_ref (image);
-	    g_file_read_async (image->priv->file, 0, NULL, (GAsyncReadyCallback)cb_rstto_image_read_file_ready, image);
-    }
-    else
-    {
-        g_signal_emit(G_OBJECT(image), rstto_image_signals[RSTTO_IMAGE_SIGNAL_UPDATED], 0, image, NULL);
-    }
-    rstto_image_cache_push_image (cache, image, preload);
-    return TRUE;
-}
-
-
-/**
- * rstto_image_unload:
- * @image       : The image to unload from memory.
- *
- * This function will unload the image-pixbuf from memory.
- */
-void
-rstto_image_unload (RsttoImage *image)
-{
-    g_return_if_fail (image != NULL);
-
-    g_cancellable_cancel (image->priv->cancellable);
-
-    if (image->priv->loader)
-    {
-        gdk_pixbuf_loader_close (image->priv->loader, NULL);
-        image->priv->loader = NULL;
-    }
-
-    if (image->priv->pixbuf)
-    {
-        g_object_unref (image->priv->pixbuf);
-        image->priv->pixbuf = NULL;
-    }
-
-    if (image->priv->thumbnail)
-    {
-        g_object_unref (image->priv->thumbnail);
-        image->priv->thumbnail = NULL;
-    }
-
-    if (image->priv->animation_timeout_id)
-    {
-        g_source_remove (image->priv->animation_timeout_id);
-        image->priv->animation_timeout_id = 0;
-    }
-
-    if (image->priv->animation)
-    {
-        g_object_unref (image->priv->animation);
-        image->priv->animation = NULL;
-    }
-
-    if (image->priv->iter)
-    {
-        g_object_unref (image->priv->iter);
-        image->priv->iter = NULL;
-    }
-
-}
-
-
 /**
  * rstto_image_get_file:
  * @image       : The image to get the GFile object from.
@@ -483,48 +314,6 @@ rstto_image_get_thumbnail (RsttoImage *image)
 
 
 /**
- * rstto_image_get_pixbuf:
- * @image       : 
- *
- * return value: a gdkpixbuf * referencing a pixbuf pointing to the image.
- */
-GdkPixbuf *
-rstto_image_get_pixbuf (RsttoImage *image)
-{
-    g_return_val_if_fail (image != NULL, NULL);
-    g_return_val_if_fail (image->priv != NULL, NULL);
-
-
-    return image->priv->pixbuf;
-}
-
-/**
- * rstto_image_get_size;
- * @image: Image object
- *
- * Returns the image-size in bytes (approx)
- *
- * Returns: Image-size (bytes) 
- */
-guint64
-rstto_image_get_size (RsttoImage *image)
-{
-    GdkPixbuf *pixbuf = rstto_image_get_pixbuf (image);
-    if (pixbuf)
-    {
-        gint rowstride = gdk_pixbuf_get_rowstride (pixbuf);
-        gint height = gdk_pixbuf_get_height (pixbuf);
-        /* HACK HACK HACK HACK */
-        /* multiplied by 2 since it is unclear why the nr of bytes
-         * in memory is twice what is calculated here, based on the dimensions
-         */
-        //return rowstride * height * 2;
-        return (guint64)rowstride * (guint64)height;
-    }
-    return 0;
-}
-
-/**
  * rstto_image_get_orientation;
  * @image:
  *
@@ -573,253 +362,3 @@ rstto_image_set_orientation (RsttoImage *image, RsttoImageOrientation orientatio
     image->priv->orientation = orientation;
     g_signal_emit (G_OBJECT(image), rstto_image_signals[RSTTO_IMAGE_SIGNAL_UPDATED], 0, image, NULL);
 }
-
-/**
- * PRIVATE CALLBACKS 
- */
-
-/**
- * cb_rstto_image_read_file_ready:
- * @source_object:
- * @result:
- * @user_data:
- * 
- *
- */
-static void
-cb_rstto_image_read_file_ready (GObject *source_object, GAsyncResult *result, gpointer user_data)
-{
-    GFile *file = G_FILE (source_object);
-    RsttoImage *image = RSTTO_IMAGE (user_data);
-    GFileInputStream *file_input_stream = g_file_read_finish (file, result, NULL);
-    
-    if (g_cancellable_is_cancelled (image->priv->cancellable))
-    {
-        g_object_unref (image);
-        return;
-    }
-
-
-    g_input_stream_read_async (G_INPUT_STREAM (file_input_stream),
-                               image->priv->buffer,
-                               RSTTO_IMAGE_BUFFER_SIZE,
-                               G_PRIORITY_DEFAULT,
-                               NULL,
-                               (GAsyncReadyCallback) cb_rstto_image_read_input_stream_ready,
-                               image);
-}
-
-/**
- * cb_rstto_image_read_input_stream_ready:
- * @source_object:
- * @result:
- * @user_data:
- * 
- *
- */
-static void
-cb_rstto_image_read_input_stream_ready (GObject *source_object, GAsyncResult *result, gpointer user_data)
-{
-    RsttoImage *image = RSTTO_IMAGE (user_data);
-    gssize read_bytes = g_input_stream_read_finish (G_INPUT_STREAM (source_object), result, NULL);
-    GError *error = NULL;
-
-    if (g_cancellable_is_cancelled (image->priv->cancellable))
-    {
-        g_object_unref (image);
-        return;
-    }
-
-    if (image->priv->loader == NULL)
-        return;
-
-
-    if (read_bytes > 0)
-    {
-        if(gdk_pixbuf_loader_write (image->priv->loader, (const guchar *)image->priv->buffer, read_bytes, &error) == FALSE)
-        {
-            g_input_stream_close (G_INPUT_STREAM (source_object), NULL, NULL);
-            g_object_unref (image);
-        }
-        else
-        {
-            g_input_stream_read_async (G_INPUT_STREAM (source_object),
-                                       image->priv->buffer,
-                                       RSTTO_IMAGE_BUFFER_SIZE,
-                                       G_PRIORITY_DEFAULT,
-                                       NULL,
-                                       (GAsyncReadyCallback) cb_rstto_image_read_input_stream_ready,
-                                       image);
-        }
-    }
-    else
-    if (read_bytes == 0)
-    {
-        if (read_bytes == 0)
-        {
-            /* OK */
-            g_input_stream_close (G_INPUT_STREAM (source_object), NULL, NULL);
-            gdk_pixbuf_loader_close (image->priv->loader, NULL);
-            g_object_unref (image);
-        }
-        else
-        {
-            /* I/O ERROR */
-            g_input_stream_close (G_INPUT_STREAM (source_object), NULL, NULL);
-            gdk_pixbuf_loader_close (image->priv->loader, NULL);
-            g_object_unref (image);
-        }
-    }
-}
-
-/**
- * cb_rstto_image_size_prepared:
- * @loader:
- * @width;
- * @height;
- * @image:
- *
- */
-static void
-cb_rstto_image_size_prepared (GdkPixbufLoader *loader, gint width, gint height, RsttoImage *image)
-{
-    image->priv->width = width;
-    image->priv->height = height;
-
-    if (image->priv->scale > 0.0)
-    {
-    	gdk_pixbuf_loader_set_size (loader, (gint)((gdouble)width*image->priv->scale), (gint)((gdouble)height*image->priv->scale));
-    }
-    else
-    {
-        if (width > height)
-        {
-            if (width > STD_IMAGE_SIZE)
-            {
-    	        gdk_pixbuf_loader_set_size (loader, STD_IMAGE_SIZE, (height*STD_IMAGE_SIZE)/width);
-            }
-        }
-        else
-        {
-            if (height > STD_IMAGE_SIZE)
-            {
-    	        gdk_pixbuf_loader_set_size (loader, (width*STD_IMAGE_SIZE)/height, STD_IMAGE_SIZE);
-            }
-
-        }
-    }
-
-    g_signal_emit(G_OBJECT(image), rstto_image_signals[RSTTO_IMAGE_SIGNAL_PREPARED], 0, image, NULL);
-}
-
-/**
- * cb_rstto_image_area_prepared:
- * @loader:
- * @image:
- *
- */
-static void
-cb_rstto_image_area_prepared (GdkPixbufLoader *loader, RsttoImage *image)
-{
-    gint timeout = 0;
-    image->priv->animation = gdk_pixbuf_loader_get_animation (loader);
-    image->priv->iter = gdk_pixbuf_animation_get_iter (image->priv->animation, NULL);
-    if (image->priv->pixbuf)
-    {
-        g_object_unref(image->priv->pixbuf);
-        image->priv->pixbuf = NULL;
-    }
-
-    g_object_ref (image->priv->animation);
-
-    timeout = gdk_pixbuf_animation_iter_get_delay_time (image->priv->iter);
-
-    if (timeout != -1)
-    {
-        /* fix borked stuff */
-        if (timeout == 0)
-        {
-            g_warning("timeout == 0: defaulting to 40ms");
-            timeout = 40;
-        }
-
-        image->priv->animation_timeout_id = g_timeout_add(timeout, (GSourceFunc)cb_rstto_image_update, image);
-    }   
-    else
-    {
-        image->priv->pixbuf = gdk_pixbuf_animation_iter_get_pixbuf (image->priv->iter);
-        g_object_ref (image->priv->pixbuf);
-    }
-}
-
-/**
- * cb_rstto_image_closed:
- * @loader:
- * @image:
- *
- * Image loading is complete
- *
- */
-static void
-cb_rstto_image_closed (GdkPixbufLoader *loader, RsttoImage *image)
-{
-    g_return_if_fail (image != NULL);
-    g_return_if_fail (RSTTO_IS_IMAGE (image));
-    g_return_if_fail (loader == image->priv->loader);
-
-    g_object_unref (image->priv->loader);
-    image->priv->loader = NULL;
-
-   
-    if (image->priv->pixbuf != NULL)
-    {
-        g_signal_emit(G_OBJECT(image), rstto_image_signals[RSTTO_IMAGE_SIGNAL_UPDATED], 0, image, NULL);
-    }
-}
-
-/**
- * cb_rstto_image_update:
- * @image:
- * 
- * Used for advancing to the next frame in an animated image,
- * TODO: rename - to make it's purpose more clear.
- *
- * Return value:
- */
-static gboolean
-cb_rstto_image_update(RsttoImage *image)
-{
-    gint timeout = 0;
-
-    if (image->priv->iter)
-    {
-        if(gdk_pixbuf_animation_iter_advance (image->priv->iter, NULL))
-        {
-            /* Cleanup old image */
-            if (image->priv->pixbuf)
-            {
-                g_object_unref (image->priv->pixbuf);
-                image->priv->pixbuf = NULL;
-            }
-
-            image->priv->pixbuf = gdk_pixbuf_copy (gdk_pixbuf_animation_iter_get_pixbuf (image->priv->iter));
-        }
-
-        timeout = gdk_pixbuf_animation_iter_get_delay_time (image->priv->iter);
-
-        if (timeout != -1)
-        {
-            if (timeout == 0)
-            {
-                g_warning("timeout == 0: defaulting to 40ms");
-                timeout = 40;
-            }
-            image->priv->animation_timeout_id = g_timeout_add(timeout, (GSourceFunc)cb_rstto_image_update, image);
-        }
-        g_signal_emit (G_OBJECT(image), rstto_image_signals[RSTTO_IMAGE_SIGNAL_UPDATED], 0, image, NULL);
-
-        return FALSE;
-    }
-    return TRUE;
-}
-
diff --git a/src/image.h b/src/image.h
index c6a8407..959aaed 100644
--- a/src/image.h
+++ b/src/image.h
@@ -76,13 +76,10 @@ RsttoImage *rstto_image_new (GFile *file);
 GType       rstto_image_get_type ();
 
 GdkPixbuf *rstto_image_get_thumbnail (RsttoImage *image);
-GdkPixbuf *rstto_image_get_pixbuf (RsttoImage *image);
 gint rstto_image_get_width (RsttoImage *image);
 gint rstto_image_get_height (RsttoImage *image);
 
 GFile *rstto_image_get_file (RsttoImage *image);
-void rstto_image_unload (RsttoImage *image);
-gboolean rstto_image_load (RsttoImage *image, gboolean empty_cache, gdouble scale, gboolean preload, GError **error);
 
 guint64 rstto_image_get_size (RsttoImage *image);
 
diff --git a/src/image_cache.c b/src/image_cache.c
deleted file mode 100644
index e037c17..0000000
--- a/src/image_cache.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- *  Copyright (c) Stephan Arts 2009-2010 <stephan at xfce.org>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  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.
- */
-
-#include <config.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-#include <gdk/gdk.h>
-
-#include <libexif/exif-data.h>
-
-#include "image.h"
-#include "image_cache.h"
-#include "settings.h"
-
-static void
-rstto_image_cache_init (GObject *);
-static void
-rstto_image_cache_class_init (GObjectClass *);
-
-static RsttoImageCache *rstto_global_image_cache = NULL;
-
-struct _RsttoImageCache
-{
-    GObject parent;
-    GList *cache_list;
-};
-
-struct _RsttoImageCacheClass
-{
-    GObjectClass parent_class;
-};
-
-
-GType
-rstto_image_cache_get_type (void)
-{
-    static GType rstto_image_cache_type = 0;
-
-    if (!rstto_image_cache_type)
-    {
-        static const GTypeInfo rstto_image_cache_info = 
-        {
-            sizeof (RsttoImageCacheClass),
-            (GBaseInitFunc) NULL,
-            (GBaseFinalizeFunc) NULL,
-            (GClassInitFunc) rstto_image_cache_class_init,
-            (GClassFinalizeFunc) NULL,
-            NULL,
-            sizeof (RsttoImageCache),
-            0,
-            (GInstanceInitFunc) rstto_image_cache_init,
-            NULL
-        };
-
-        rstto_image_cache_type = g_type_register_static (G_TYPE_OBJECT, "RsttoImageCache", &rstto_image_cache_info, 0);
-    }
-    return rstto_image_cache_type;
-}
-
-
-static void
-rstto_image_cache_init (GObject *object)
-{
-
-}
-
-static void
-rstto_image_cache_class_init (GObjectClass *object_class)
-{
-
-}
-
-gboolean
-rstto_image_cache_pop_image (RsttoImageCache *cache, RsttoImage *image)
-{
-    if (cache->cache_list)
-    {
-        rstto_image_unload (image);
-        cache->cache_list = g_list_remove_all (cache->cache_list, image);
-    }
-    return TRUE;
-}
-
-gboolean
-rstto_image_cache_push_image (RsttoImageCache *cache, RsttoImage *image, gboolean last)
-{
-    gboolean retval = FALSE;
-    RsttoSettings *settings = rstto_settings_new();
-    gboolean cache_enabled;
-    guint64 size = 0;
-    guint cache_size = 0;
-    RsttoImage *c_image;
-    GList *iter = NULL;
-
-    g_object_get (G_OBJECT (settings),
-                  "enable-cache", &cache_enabled,
-                  "cache-size", &cache_size,
-                  NULL);
-
-    if (cache->cache_list)
-    {
-        cache->cache_list = g_list_remove_all (cache->cache_list, image);
-    }
-
-    if (last)
-    {
-        cache->cache_list = g_list_append (cache->cache_list, image);
-    }
-    else
-    {
-        cache->cache_list = g_list_prepend (cache->cache_list, image);
-    }
-
-    /**
-     * Check if we are keeping a cache
-     */
-    if (cache_enabled == FALSE)
-    {
-        while (g_list_length (cache->cache_list) > 1)
-        {
-            c_image = g_list_last (cache->cache_list)->data;
-            rstto_image_unload (c_image);
-            cache->cache_list = g_list_remove (cache->cache_list, c_image);
-            retval = TRUE;
-        }
-    }
-    else
-    {
-        /* Calculate the cache-size, if it exceeds the defined maximum,
-         * unload the the images that exceed that.
-         */
-        for (iter = cache->cache_list->next; iter != NULL; iter = g_list_next (iter))
-        {
-            c_image = iter->data;
-            size = size + rstto_image_get_size (c_image);
-            if (size > (guint64)(cache_size*1000000))
-            {
-                rstto_image_unload (c_image);
-                cache->cache_list = g_list_remove (cache->cache_list, c_image);
-                iter = g_list_previous(iter);
-                retval = TRUE;
-            } 
-            else
-            {
-                if (rstto_image_get_size (c_image) == 0)
-                {
-                    rstto_image_unload (c_image);
-                    cache->cache_list = g_list_remove (cache->cache_list, c_image);
-                    iter = g_list_previous(iter);
-                }
-            }
-        }
-    }
-    g_object_unref (settings);
-    return retval;
-}
-
-/**
- * rstto_image_cache_new:
- *
- * Singleton
- *
- * Return value: 
- */
-RsttoImageCache *
-rstto_image_cache_new (void)
-{
-    if (rstto_global_image_cache == NULL)
-    {
-        rstto_global_image_cache = g_object_new (RSTTO_TYPE_IMAGE_CACHE, NULL);
-    }
-
-    return rstto_global_image_cache;
-}
-
-void
-rstto_image_cache_clear (RsttoImageCache *cache)
-{
-    RsttoImage *c_image;
-    RsttoSettings *settings_manager = rstto_settings_new();
-    GValue max_size = {0,};
-
-    g_value_init (&max_size, G_TYPE_UINT);
-    g_object_get_property (G_OBJECT(settings_manager), "image-quality", &max_size);
-
-
-    while (g_list_length (cache->cache_list) > 1)
-    {
-        c_image = g_list_last (cache->cache_list)->data;
-        rstto_image_unload (c_image);
-        cache->cache_list = g_list_remove (cache->cache_list, c_image);
-    }
-    if (cache->cache_list)
-    {
-        rstto_image_load (cache->cache_list->data, TRUE, g_value_get_uint (&max_size), FALSE, NULL);
-    }
-    g_object_unref (settings_manager);
-}
diff --git a/src/image_cache.h b/src/image_cache.h
deleted file mode 100644
index 4c79047..0000000
--- a/src/image_cache.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  Copyright (c) Stephan Arts 2009-2010 <stephan at xfce.org>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  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.
- */
-
-#ifndef __RISTRETTO_IMAGE_CACHE_H__
-#define __RISTRETTO_IMAGE_CACHE_H__
-
-G_BEGIN_DECLS
-
-#define RSTTO_TYPE_IMAGE_CACHE rstto_image_cache_get_type()
-
-#define RSTTO_IMAGE_CACHE(obj)( \
-        G_TYPE_CHECK_INSTANCE_CAST ((obj), \
-                RSTTO_TYPE_IMAGE_CACHE, \
-                RsttoImageCache))
-
-#define RSTTO_IS_IMAGE_CACHE(obj)( \
-        G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
-                RSTTO_TYPE_IMAGE_CACHE))
-
-#define RSTTO_IMAGE_CACHE_CLASS(klass)( \
-        G_TYPE_CHECK_CLASS_CAST ((klass), \
-                RSTTO_TYPE_IMAGE_CACHE, \
-                RsttoImageCacheClass))
-
-#define RSTTO_IS_IMAGE_CACHE_CLASS(klass)( \
-        G_TYPE_CHECK_CLASS_TYPE ((klass), \
-                RSTTO_TYPE_IMAGE_CACHE()))
-
-typedef struct _RsttoImageCache RsttoImageCache;
-
-typedef struct _RsttoImageCacheClass RsttoImageCacheClass;
-
-GType rstto_image_cache_get_type (void);
-RsttoImageCache *rstto_image_cache_new ();
-
-gboolean rstto_image_cache_push_image (RsttoImageCache *cache, RsttoImage *image, gboolean last);
-gboolean rstto_image_cache_pop_image (RsttoImageCache *cache, RsttoImage *image);
-
-void rstto_image_cache_clear (RsttoImageCache *cache);
-
-G_END_DECLS
-
-#endif /* __RISTRETTO_IMAGE_CACHE_H__ */
diff --git a/src/image_viewer.c b/src/image_viewer.c
index 97efbfb..f6b288b 100644
--- a/src/image_viewer.c
+++ b/src/image_viewer.c
@@ -54,6 +54,7 @@ struct _RsttoImageViewerPriv
     GdkPixbuf                   *pixbuf;
     GdkPixbuf                   *dst_pixbuf;
     RsttoImageViewerOrientation  orientation;
+    gdouble                      quality;
 
     /* Animation data for animated images (like .gif/.mng) */
     /*******************************************************/
@@ -960,22 +961,10 @@ void
 rstto_image_viewer_set_scale (RsttoImageViewer *viewer, gdouble scale)
 {
     gdouble tmp_x, tmp_y;
-    GtkAdjustment *vadjustment, *hadjustment;
-
-    switch (viewer->priv->orientation)
-    {
-        case RSTTO_IMAGE_VIEWER_ORIENT_NONE:
-        case RSTTO_IMAGE_VIEWER_ORIENT_180:
-            hadjustment = viewer->hadjustment;
-            vadjustment = viewer->vadjustment;
-            break;
-        case RSTTO_IMAGE_VIEWER_ORIENT_270:
-        case RSTTO_IMAGE_VIEWER_ORIENT_90:
-            hadjustment = viewer->vadjustment;
-            vadjustment = viewer->hadjustment;
-            break;
-    }
-
+    gint pixbuf_width = 0;
+    gint pixbuf_height = 0;
+    gint pixbuf_x_offset = 0;
+    gint pixbuf_y_offset = 0;
 
     if (scale == 0)
     {
@@ -1060,17 +1049,27 @@ rstto_image_viewer_set_scale (RsttoImageViewer *viewer, gdouble scale)
         }
 
         viewer->priv->auto_scale = FALSE;
+
+        if (viewer->priv->dst_pixbuf)
+        {
+            pixbuf_width = gdk_pixbuf_get_width(viewer->priv->dst_pixbuf);
+            pixbuf_height = gdk_pixbuf_get_height(viewer->priv->dst_pixbuf);
+            pixbuf_x_offset = ((GTK_WIDGET(viewer)->allocation.width - pixbuf_width)/2);
+            pixbuf_y_offset = ((GTK_WIDGET(viewer)->allocation.height - pixbuf_height)/2);
+        }
         
         /*
          * When zooming in or out, 
          * try keeping the center of the viewport in the center.
          */
-        tmp_y = (gtk_adjustment_get_value(vadjustment) + (gtk_adjustment_get_page_size (vadjustment) / 2)) / viewer->priv->scale;
-        gtk_adjustment_set_value (vadjustment, (tmp_y*scale - (gtk_adjustment_get_page_size(vadjustment)/2)));
+        tmp_y = (gtk_adjustment_get_value(viewer->vadjustment) + 
+                        (gtk_adjustment_get_page_size (viewer->vadjustment) / 2) - pixbuf_y_offset) / viewer->priv->scale;
+        gtk_adjustment_set_value (viewer->vadjustment, (tmp_y*scale - (gtk_adjustment_get_page_size(viewer->vadjustment)/2)));
 
 
-        tmp_x = (gtk_adjustment_get_value(hadjustment) + (gtk_adjustment_get_page_size (hadjustment) / 2)) / viewer->priv->scale;
-        gtk_adjustment_set_value (hadjustment, (tmp_x*scale - (gtk_adjustment_get_page_size(hadjustment)/2)));
+        tmp_x = (gtk_adjustment_get_value(viewer->hadjustment) +
+                        (gtk_adjustment_get_page_size (viewer->hadjustment) / 2) - pixbuf_x_offset) / viewer->priv->scale;
+        gtk_adjustment_set_value (viewer->hadjustment, (tmp_x*scale - (gtk_adjustment_get_page_size(viewer->hadjustment)/2)));
 
     }
 
@@ -1099,6 +1098,28 @@ rstto_image_viewer_get_motion_state (RsttoImageViewer *viewer)
     return viewer->priv->motion.state;
 }
 
+/*
+ * rstto_image_viewer_set_orientation:
+ * @viewer:
+ * @orientation:
+ *
+ * Set orientation for the image shown here.
+ */
+void
+rstto_image_viewer_set_orientation (
+        RsttoImageViewer *viewer, 
+        RsttoImageViewerOrientation orientation)
+{
+    viewer->priv->orientation = orientation;
+    rstto_image_viewer_queued_repaint (viewer, TRUE);
+}
+
+RsttoImageViewerOrientation
+rstto_image_viewer_get_orientation (RsttoImageViewer *viewer)
+{
+    return viewer->priv->orientation;
+}
+
 
 /************************/
 /** CALLBACK FUNCTIONS **/
@@ -1445,12 +1466,13 @@ cb_rstto_image_viewer_queued_repaint (RsttoImageViewer *viewer)
                 }
                 gtk_adjustment_set_upper (hadjustment, (gdouble)width*(viewer->priv->scale/viewer->priv->image_scale));
                 gtk_adjustment_set_upper (vadjustment, (gdouble)height*(viewer->priv->scale/viewer->priv->image_scale));
+
                 subpixbuf_x_offset = (gint)(gtk_adjustment_get_value (hadjustment) / relative_scale);
                 subpixbuf_y_offset = (gint)(gtk_adjustment_get_value (vadjustment) / relative_scale);
                 subpixbuf_width = (gint)((gtk_adjustment_get_page_size (hadjustment) / relative_scale) < width)?
                                (gtk_adjustment_get_page_size (hadjustment) / relative_scale)+1:(width);
                 subpixbuf_height = (gint)((gtk_adjustment_get_page_size (vadjustment) / relative_scale) < height)?
-                               (gtk_adjustment_get_page_size (vadjustment) / relative_scale)+1:(width);
+                               (gtk_adjustment_get_page_size (vadjustment) / relative_scale)+1:(height);
                 break;
             case RSTTO_IMAGE_VIEWER_ORIENT_180:
                 gtk_adjustment_set_upper (hadjustment, (gdouble)width*(viewer->priv->scale/viewer->priv->image_scale));
@@ -1554,7 +1576,6 @@ cb_rstto_image_viewer_queued_repaint (RsttoImageViewer *viewer)
                 viewer->priv->dst_pixbuf = NULL;
             }
 
-
             tmp_pixbuf = gdk_pixbuf_new_subpixbuf (viewer->priv->pixbuf,
                     subpixbuf_x_offset,
                     subpixbuf_y_offset,
diff --git a/src/image_viewer.h b/src/image_viewer.h
index 533d9e2..a7298b6 100644
--- a/src/image_viewer.h
+++ b/src/image_viewer.h
@@ -73,16 +73,35 @@ struct _RsttoImageViewerClass
           GtkAdjustment     *vadjustment);
 };
 
-GType      rstto_image_viewer_get_type();
-
-GtkWidget *rstto_image_viewer_new ();
-void       rstto_image_viewer_set_file (RsttoImageViewer *viewer,
-                                        GFile *file,
-                                        gdouble scale,
-                                        RsttoImageViewerOrientation orientation);
-
-void       rstto_image_viewer_set_scale (RsttoImageViewer *viewer, gdouble scale);
-gdouble    rstto_image_viewer_get_scale (RsttoImageViewer *viewer);
+GType
+rstto_image_viewer_get_type();
+
+GtkWidget *
+rstto_image_viewer_new ();
+
+void
+rstto_image_viewer_set_file (
+        RsttoImageViewer *viewer,
+        GFile *file,
+        gdouble scale,
+        RsttoImageViewerOrientation orientation);
+
+void
+rstto_image_viewer_set_scale (
+        RsttoImageViewer *viewer,
+        gdouble scale);
+
+gdouble
+rstto_image_viewer_get_scale (
+        RsttoImageViewer *viewer);
+
+void
+rstto_image_viewer_set_orientation (
+        RsttoImageViewer *viewer, 
+        RsttoImageViewerOrientation orientation);
+
+RsttoImageViewerOrientation
+rstto_image_viewer_get_orientation (RsttoImageViewer *viewer);
 
 G_END_DECLS
 
diff --git a/src/main.c b/src/main.c
index 552f0ab..c377c8f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -33,7 +33,6 @@
 #include "image.h"
 #include "image_list.h"
 #include "settings.h"
-#include "picture_viewer.h"
 #include "main_window.h"
 
 
diff --git a/src/main_window.c b/src/main_window.c
index 2f32fd0..c8e552d 100644
--- a/src/main_window.c
+++ b/src/main_window.c
@@ -33,7 +33,6 @@
 
 #include "settings.h"
 #include "image_list.h"
-#include "image_cache.h"
 #include "image_viewer.h"
 #include "main_window.h"
 #include "main_window_ui.h"
@@ -46,8 +45,6 @@
 #include "preferences_dialog.h"
 #include "app_menu_item.h"
 
-#define XFDESKTOP_SELECTION_FMT "XFDESKTOP_SELECTION_%d"
-
 #ifndef RISTRETTO_APP_TITLE
 #define RISTRETTO_APP_TITLE "Image viewer"
 #endif
@@ -214,14 +211,6 @@ static void
 cb_rstto_main_window_navigationtoolbar_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data);
 
 static void
-cb_rstto_main_window_print (GtkWidget *widget, RsttoMainWindow *window);
-static void
-rstto_main_window_print_draw_page (GtkPrintOperation *operation,
-           GtkPrintContext   *print_context,
-           gint               page_nr,
-          RsttoMainWindow *window);
-
-static void
 cb_rstto_main_window_play (GtkWidget *widget, RsttoMainWindow *window);
 static void
 cb_rstto_main_window_pause(GtkWidget *widget, RsttoMainWindow *window);
@@ -282,7 +271,6 @@ static GtkActionEntry action_entries[] =
   { "open", "document-open", N_ ("_Open"), "<control>O", N_ ("Open an image"), G_CALLBACK (cb_rstto_main_window_open_image), },
   { "open-folder", "folder-open", N_ ("Open _Folder"), NULL, N_ ("Open a folder"), G_CALLBACK (cb_rstto_main_window_open_folder), },
   { "save-copy", GTK_STOCK_SAVE_AS, N_ ("_Save copy"), "<control>s", N_ ("Save a copy of the image"), G_CALLBACK (cb_rstto_main_window_save_copy), },
-  { "print", GTK_STOCK_PRINT, N_ ("_Print"), "<control>p", N_ ("Print the image"), G_CALLBACK (cb_rstto_main_window_print), },
   { "close", GTK_STOCK_CLOSE, N_ ("_Close"), "<control>W", N_ ("Close this image"), G_CALLBACK (cb_rstto_main_window_close), },
   { "close-all", NULL, N_ ("_Close All"), NULL, N_ ("Close all images"), G_CALLBACK (cb_rstto_main_window_close_all), },
   { "quit", GTK_STOCK_QUIT, N_ ("_Quit"), "<control>Q", N_ ("Quit Ristretto"), G_CALLBACK (cb_rstto_main_window_quit), },
@@ -398,6 +386,7 @@ rstto_main_window_init (RsttoMainWindow *window)
     GtkRecentFilter *recent_filter;
     guint            window_width, window_height;
     RsttoWallpaperManager *wallpaper_manager = NULL;
+    gchar           *desktop_type = NULL;
 
     GClosure        *leave_fullscreen_closure = g_cclosure_new_swap ((GCallback)gtk_window_unfullscreen, window, NULL);
     GClosure        *next_image_closure = g_cclosure_new ((GCallback)cb_rstto_main_window_next_image, window, NULL);
@@ -409,20 +398,7 @@ rstto_main_window_init (RsttoMainWindow *window)
     gtk_window_set_title (GTK_WINDOW (window), RISTRETTO_APP_TITLE);
 
     window->priv = g_new0(RsttoMainWindowPriv, 1);
-    wallpaper_manager = RSTTO_WALLPAPER_MANAGER (rstto_gnome_wallpaper_manager_new());
-    if (rstto_wallpaper_manager_check_running (wallpaper_manager) == FALSE)
-    {
-        g_object_unref (wallpaper_manager);
-        wallpaper_manager = NULL;
-    }
-
-    wallpaper_manager = RSTTO_WALLPAPER_MANAGER (rstto_xfce_wallpaper_manager_new());
-    if (rstto_wallpaper_manager_check_running (wallpaper_manager) == FALSE)
-    {
-        g_object_unref (wallpaper_manager);
-        wallpaper_manager = NULL;
-    }
-    window->priv->wallpaper_manager = wallpaper_manager;
+    
 
     window->priv->iter = NULL;
 
@@ -430,6 +406,29 @@ rstto_main_window_init (RsttoMainWindow *window)
     window->priv->recent_manager = gtk_recent_manager_get_default();
     window->priv->settings_manager = rstto_settings_new();
 
+    desktop_type = rstto_settings_get_string_property (window->priv->settings_manager, "desktop-type");
+    if (desktop_type)
+    {
+        if (!g_strcasecmp(desktop_type, "xfce"))
+        {
+            window->priv->wallpaper_manager = rstto_xfce_wallpaper_manager_new();
+        }
+
+        if (!g_strcasecmp(desktop_type, "gnome"))
+        {
+            window->priv->wallpaper_manager = rstto_gnome_wallpaper_manager_new();
+        }
+
+        if (!g_strcasecmp(desktop_type, "meego"))
+        {
+            window->priv->wallpaper_manager = rstto_meego_wallpaper_manager_new();
+        }
+
+        g_free (desktop_type);
+        desktop_type = NULL;
+    }
+
+
     navigationbar_position = rstto_settings_get_navbar_position (window->priv->settings_manager);
 
     accel_group = gtk_ui_manager_get_accel_group (window->priv->ui_manager);
@@ -824,7 +823,7 @@ rstto_main_window_image_list_iter_changed (RsttoMainWindow *window)
             file_info = g_file_query_info (file, "standard::content-type", 0, NULL, NULL);
             content_type  = g_file_info_get_content_type (file_info);
 
-            rstto_image_viewer_set_file (RSTTO_IMAGE_VIEWER(window->priv->image_viewer), file, -1, RSTTO_IMAGE_VIEWER_ORIENT_270);
+            rstto_image_viewer_set_file (RSTTO_IMAGE_VIEWER(window->priv->image_viewer), file, -1, RSTTO_IMAGE_VIEWER_ORIENT_NONE);
 
             app_list = g_app_info_get_all_for_type (content_type);
 
@@ -865,7 +864,7 @@ rstto_main_window_image_list_iter_changed (RsttoMainWindow *window)
             gtk_menu_shell_append (GTK_MENU_SHELL (open_with_menu), menu_item);
             gtk_widget_set_sensitive (menu_item, FALSE);
 
-            rstto_image_viewer_set_file (RSTTO_IMAGE_VIEWER(window->priv->image_viewer), NULL, -1, RSTTO_IMAGE_VIEWER_ORIENT_270);
+            rstto_image_viewer_set_file (RSTTO_IMAGE_VIEWER(window->priv->image_viewer), NULL, -1, RSTTO_IMAGE_VIEWER_ORIENT_NONE);
 
 
             menu_item = gtk_image_menu_item_new_with_label (_("Empty"));
@@ -1580,7 +1579,6 @@ cb_rstto_main_window_play_slideshow (RsttoMainWindow *window)
             preload_iter = rstto_image_list_iter_clone (window->priv->iter);   
 
             rstto_image_list_iter_next (preload_iter);
-            //rstto_image_load (rstto_image_list_iter_get_image (preload_iter), TRUE, g_value_get_uint (&max_size), TRUE, NULL);
 
             g_value_reset(&max_size);
             g_object_unref (preload_iter);
@@ -1641,7 +1639,6 @@ cb_rstto_main_window_preferences (GtkWidget *widget, RsttoMainWindow *window)
 
     if (g_value_get_uint (&val1) != g_value_get_uint (&val2))
     {
-        rstto_image_cache_clear (rstto_image_cache_new());
     }
 
     gtk_widget_destroy (dialog);
@@ -1840,29 +1837,22 @@ cb_rstto_main_window_zoom_out (GtkWidget *widget, RsttoMainWindow *window)
 static void
 cb_rstto_main_window_rotate_cw (GtkWidget *widget, RsttoMainWindow *window)
 {
-    RsttoImage *image = NULL;
-
-    if (window->priv->iter)
-        image = rstto_image_list_iter_get_image (window->priv->iter);
-
-    if (image)
+    RsttoImageViewer *viewer = RSTTO_IMAGE_VIEWER(window->priv->image_viewer);
+    switch (rstto_image_viewer_get_orientation (viewer))
     {
-        switch (rstto_image_get_orientation (image))
-        {
-            default:
-            case RSTTO_IMAGE_ORIENT_NONE:
-                rstto_image_set_orientation (image, RSTTO_IMAGE_ORIENT_90);
-                break;
-            case RSTTO_IMAGE_ORIENT_90:
-                rstto_image_set_orientation (image, RSTTO_IMAGE_ORIENT_180);
-                break;
-            case RSTTO_IMAGE_ORIENT_180:
-                rstto_image_set_orientation (image, RSTTO_IMAGE_ORIENT_270);
-                break;
-            case RSTTO_IMAGE_ORIENT_270:
-                rstto_image_set_orientation (image, RSTTO_IMAGE_ORIENT_NONE);
-                break;
-        }
+        default:
+        case RSTTO_IMAGE_VIEWER_ORIENT_NONE:
+            rstto_image_viewer_set_orientation (viewer, RSTTO_IMAGE_VIEWER_ORIENT_90);
+            break;
+        case RSTTO_IMAGE_VIEWER_ORIENT_90:
+            rstto_image_viewer_set_orientation (viewer, RSTTO_IMAGE_VIEWER_ORIENT_180);
+            break;
+        case RSTTO_IMAGE_VIEWER_ORIENT_180:
+            rstto_image_viewer_set_orientation (viewer, RSTTO_IMAGE_VIEWER_ORIENT_270);
+            break;
+        case RSTTO_IMAGE_VIEWER_ORIENT_270:
+            rstto_image_viewer_set_orientation (viewer, RSTTO_IMAGE_VIEWER_ORIENT_NONE);
+            break;
     }
 }
 
@@ -1876,29 +1866,22 @@ cb_rstto_main_window_rotate_cw (GtkWidget *widget, RsttoMainWindow *window)
 static void
 cb_rstto_main_window_rotate_ccw (GtkWidget *widget, RsttoMainWindow *window)
 {
-    RsttoImage *image = NULL;
-
-    if (window->priv->iter)
-        image = rstto_image_list_iter_get_image (window->priv->iter);
-
-    if (image)
+    RsttoImageViewer *viewer = RSTTO_IMAGE_VIEWER(window->priv->image_viewer);
+    switch (rstto_image_viewer_get_orientation (viewer))
     {
-        switch (rstto_image_get_orientation (image))
-        {
-            default:
-            case RSTTO_IMAGE_ORIENT_NONE:
-                rstto_image_set_orientation (image, RSTTO_IMAGE_ORIENT_270);
-                break;
-            case RSTTO_IMAGE_ORIENT_90:
-                rstto_image_set_orientation (image, RSTTO_IMAGE_ORIENT_NONE);
-                break;
-            case RSTTO_IMAGE_ORIENT_180:
-                rstto_image_set_orientation (image, RSTTO_IMAGE_ORIENT_90);
-                break;
-            case RSTTO_IMAGE_ORIENT_270:
-                rstto_image_set_orientation (image, RSTTO_IMAGE_ORIENT_180);
-                break;
-        }
+        default:
+        case RSTTO_IMAGE_VIEWER_ORIENT_NONE:
+            rstto_image_viewer_set_orientation (viewer, RSTTO_IMAGE_VIEWER_ORIENT_270);
+            break;
+        case RSTTO_IMAGE_VIEWER_ORIENT_90:
+            rstto_image_viewer_set_orientation (viewer, RSTTO_IMAGE_VIEWER_ORIENT_NONE);
+            break;
+        case RSTTO_IMAGE_VIEWER_ORIENT_180:
+            rstto_image_viewer_set_orientation (viewer, RSTTO_IMAGE_VIEWER_ORIENT_90);
+            break;
+        case RSTTO_IMAGE_VIEWER_ORIENT_270:
+            rstto_image_viewer_set_orientation (viewer, RSTTO_IMAGE_VIEWER_ORIENT_180);
+            break;
     }
 }
 
@@ -2332,71 +2315,6 @@ cb_rstto_main_window_delete (GtkWidget *widget, RsttoMainWindow *window)
 /* PRINTING CALLBACKS */
 /**********************/
 
-/**
- * cb_rstto_main_window_print:
- * @widget:
- * @window:
- *
- *
- */
-static void
-cb_rstto_main_window_print (GtkWidget *widget, RsttoMainWindow *window)
-{
-
-    GtkPrintSettings *print_settings = gtk_print_settings_new ();
-    GtkPrintOperation *print_operation = gtk_print_operation_new (); 
-    GtkPageSetup *page_setup = gtk_page_setup_new ();
-
-    gtk_print_settings_set_resolution (print_settings, 300);
-
-    gtk_page_setup_set_orientation (page_setup, GTK_PAGE_ORIENTATION_LANDSCAPE);
-
-    gtk_print_operation_set_default_page_setup (print_operation, page_setup);
-    gtk_print_operation_set_print_settings (print_operation, print_settings);
-
-    g_object_set (print_operation,
-                  "n-pages", 1,
-                  NULL);
-    
-    g_signal_connect (print_operation, "draw-page", G_CALLBACK (rstto_main_window_print_draw_page), window);
-
-    gtk_print_operation_run (print_operation, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(window), NULL);
-    
-}
-
-static void
-rstto_main_window_print_draw_page (GtkPrintOperation *operation,
-           GtkPrintContext   *print_context,
-           gint               page_nr,
-           RsttoMainWindow *window)
-{
-    RsttoImage *image = rstto_image_list_iter_get_image (window->priv->iter);
-    GdkPixbuf *pixbuf = rstto_image_get_pixbuf (image);
-    gdouble w = gdk_pixbuf_get_width (pixbuf);
-    gdouble w1 = gtk_print_context_get_width (print_context);
-    gdouble h = gdk_pixbuf_get_height (pixbuf);
-    gdouble h1 = gtk_print_context_get_height (print_context);
-
-    cairo_t *context = gtk_print_context_get_cairo_context (print_context);
-
-    cairo_translate (context, 0, 0);
-    /* Scale to page-width */
-    if ((w1/w) < (h1/h))
-    {
-        cairo_scale (context, w1/w, w1/w);
-    }
-    else
-    {
-        cairo_scale (context, h1/h, h1/h);
-    }
-    //cairo_rotate (context, 90 * 3.141592/180);
-    gdk_cairo_set_source_pixbuf (context, pixbuf, 0, 0);
-
-    //cairo_rectangle (context, 0, 0, 200, 200);
-
-    cairo_paint (context);
-}
-
 /*************************/
 /* GUI-RELATED CALLBACKS */
 /*************************/
diff --git a/src/meego_wallpaper_manager.c b/src/meego_wallpaper_manager.c
index 18f7189..3b8ef2c 100644
--- a/src/meego_wallpaper_manager.c
+++ b/src/meego_wallpaper_manager.c
@@ -31,8 +31,6 @@
 #include "wallpaper_manager.h"
 #include "meego_wallpaper_manager.h"
 
-#define XFDESKTOP_SELECTION_FMT "XFDESKTOP_SELECTION_%d"
-
 typedef struct {
     gint16 r;
     gint16 g;
@@ -53,7 +51,7 @@ rstto_meego_wallpaper_manager_finalize (GObject *object);
 
 static GObjectClass *parent_class = NULL;
 
-static RsttoMeegoWallpaperManager *meego_wallpaper_manager_object;
+static RsttoWallpaperManager *meego_wallpaper_manager_object;
 
 struct _RsttoMeegoWallpaperManagerPriv
 {
@@ -209,7 +207,7 @@ rstto_meego_wallpaper_manager_finalize (GObject *object)
  *
  * Singleton
  */
-RsttoMeegoWallpaperManager *
+RsttoWallpaperManager *
 rstto_meego_wallpaper_manager_new (void)
 {
     if (meego_wallpaper_manager_object == NULL)
diff --git a/src/meego_wallpaper_manager.h b/src/meego_wallpaper_manager.h
index 112996a..c0e5790 100644
--- a/src/meego_wallpaper_manager.h
+++ b/src/meego_wallpaper_manager.h
@@ -59,7 +59,7 @@ struct _RsttoMeegoWallpaperManagerClass
     GObjectClass parent_class;
 };
 
-RsttoMeegoWallpaperManager *rstto_meego_wallpaper_manager_new (void);
+RsttoWallpaperManager *rstto_meego_wallpaper_manager_new (void);
 GType          rstto_meego_wallpaper_manager_get_type (void);
 
 G_END_DECLS
diff --git a/src/picture_viewer.c b/src/picture_viewer.c
deleted file mode 100644
index b0c0942..0000000
--- a/src/picture_viewer.c
+++ /dev/null
@@ -1,1753 +0,0 @@
-/*
- *  Copyright (c) Stephan Arts 2006-2010 <stephan at xfce.org>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  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.
- *
- *  Drag-n-Drop support taken from Thunar, written by Benedict Meurer
- */
-
-#include <config.h>
-#include <gtk/gtk.h>
-#include <gtk/gtkmarshal.h>
-#include <string.h>
-#include <gio/gio.h>
-#include <libexif/exif-data.h>
-
-#include "image.h"
-#include "image_list.h"
-#include "picture_viewer.h"
-#include "settings.h"
-#include "main_window.h"
-#include "marshal.h"
-
-typedef enum
-{
-    RSTTO_PICTURE_VIEWER_STATE_NORMAL = 0,
-    RSTTO_PICTURE_VIEWER_STATE_PREVIEW
-} RsttoPictureViewerState;
-
-typedef enum
-{
-    RSTTO_PICTURE_VIEWER_MOTION_STATE_NORMAL = 0,
-    RSTTO_PICTURE_VIEWER_MOTION_STATE_BOX_ZOOM,
-    RSTTO_PICTURE_VIEWER_MOTION_STATE_MOVE
-} RsttoPictureViewerMotionState;
-
-typedef enum
-{
-    RSTTO_ZOOM_MODE_CUSTOM,
-    RSTTO_ZOOM_MODE_100,
-    RSTTO_ZOOM_MODE_FIT
-} RsttoZoomMode;
-
-enum
-{
-    TARGET_TEXT_URI_LIST,
-};
-
-static const GtkTargetEntry drop_targets[] = {
-    {"text/uri-list", 0, TARGET_TEXT_URI_LIST},
-};
-
-
-struct _RsttoPictureViewerPriv
-{
-    RsttoImage              *image;
-    RsttoImageListIter      *iter;
-    GtkMenu                 *menu;
-    RsttoPictureViewerState  state;
-    RsttoZoomMode            zoom_mode;
-    RsttoSettings           *settings;
-
-
-    GdkPixbuf        *dst_pixbuf; /* The pixbuf which ends up on screen */
-    void             (*cb_value_changed)(GtkAdjustment *, RsttoPictureViewer *);
-    GdkColor         *bg_color;
-
-    struct
-    {
-        gdouble x;
-        gdouble y;
-        gdouble current_x;
-        gdouble current_y;
-        gint h_val;
-        gint v_val;
-        RsttoPictureViewerMotionState state;
-    } motion;
-
-    struct
-    {
-        gint idle_id;
-        gboolean refresh;
-    } repaint;
-};
-
-static void
-rstto_picture_viewer_init(RsttoPictureViewer *);
-static void
-rstto_picture_viewer_class_init(RsttoPictureViewerClass *);
-static void
-rstto_picture_viewer_destroy(GtkObject *object);
-
-static void
-rstto_picture_viewer_set_state (RsttoPictureViewer *viewer, RsttoPictureViewerState state);
-static RsttoPictureViewerState
-rstto_picture_viewer_get_state (RsttoPictureViewer *viewer);
-static void
-rstto_picture_viewer_set_motion_state (RsttoPictureViewer *viewer, RsttoPictureViewerMotionState state);
-static RsttoPictureViewerMotionState
-rstto_picture_viewer_get_motion_state (RsttoPictureViewer *viewer);
-
-static void
-rstto_picture_viewer_set_zoom_mode (RsttoPictureViewer *viewer, RsttoZoomMode mode);
-
-static void
-rstto_picture_viewer_size_request(GtkWidget *, GtkRequisition *);
-static void
-rstto_picture_viewer_size_allocate(GtkWidget *, GtkAllocation *);
-static void
-rstto_picture_viewer_realize(GtkWidget *);
-static gboolean 
-rstto_picture_viewer_expose(GtkWidget *, GdkEventExpose *);
-static void
-rstto_picture_viewer_paint (GtkWidget *widget);
-static void 
-rstto_picture_viewer_queued_repaint (RsttoPictureViewer *viewer, gboolean refresh);
-
-static gboolean
-rstto_picture_viewer_set_scroll_adjustments(RsttoPictureViewer *, GtkAdjustment *, GtkAdjustment *);
-
-static void
-cb_rstto_picture_viewer_value_changed(GtkAdjustment *, RsttoPictureViewer *);
-static void
-cb_rstto_picture_viewer_nav_iter_changed (RsttoImageListIter *iter, gpointer user_data);
-
-static void
-cb_rstto_picture_viewer_image_updated (RsttoImage *image, RsttoPictureViewer *viewer);
-static void
-cb_rstto_picture_viewer_image_prepared (RsttoImage *image, RsttoPictureViewer *viewer);
-
-static gboolean 
-cb_rstto_picture_viewer_queued_repaint (RsttoPictureViewer *viewer);
-
-static void
-cb_rstto_picture_viewer_scroll_event (RsttoPictureViewer *viewer, GdkEventScroll *event);
-static void
-cb_rstto_picture_viewer_button_press_event (RsttoPictureViewer *viewer, GdkEventButton *event);
-static void
-cb_rstto_picture_viewer_button_release_event (RsttoPictureViewer *viewer, GdkEventButton *event);
-static gboolean 
-cb_rstto_picture_viewer_motion_notify_event (RsttoPictureViewer *viewer,
-                                             GdkEventMotion *event,
-                                             gpointer user_data);
-static void
-cb_rstto_picture_viewer_popup_menu (RsttoPictureViewer *viewer, gboolean user_data);
-
-static void
-cb_rstto_picture_viewer_bgcolor_changed (GObject *settings, GParamSpec *pspec, gpointer user_data);
-
-static GtkWidgetClass *parent_class = NULL;
-
-GType
-rstto_picture_viewer_get_type (void)
-{
-    static GType rstto_picture_viewer_type = 0;
-
-    if (!rstto_picture_viewer_type)
-    {
-        static const GTypeInfo rstto_picture_viewer_info = 
-        {
-            sizeof (RsttoPictureViewerClass),
-            (GBaseInitFunc) NULL,
-            (GBaseFinalizeFunc) NULL,
-            (GClassInitFunc) rstto_picture_viewer_class_init,
-            (GClassFinalizeFunc) NULL,
-            NULL,
-            sizeof (RsttoPictureViewer),
-            0,
-            (GInstanceInitFunc) rstto_picture_viewer_init,
-            NULL
-        };
-
-        rstto_picture_viewer_type = g_type_register_static (GTK_TYPE_WIDGET, "RsttoPictureViewer", &rstto_picture_viewer_info, 0);
-    }
-    return rstto_picture_viewer_type;
-}
-
-static void
-rstto_picture_viewer_init(RsttoPictureViewer *viewer)
-{
-    viewer->priv = g_new0(RsttoPictureViewerPriv, 1);
-    viewer->priv->cb_value_changed = cb_rstto_picture_viewer_value_changed;
-
-    viewer->priv->dst_pixbuf = NULL;
-    viewer->priv->settings = rstto_settings_new();
-    viewer->priv->zoom_mode = RSTTO_ZOOM_MODE_CUSTOM;
-    gtk_widget_set_redraw_on_allocate(GTK_WIDGET(viewer), TRUE);
-    gtk_widget_set_events (GTK_WIDGET(viewer),
-                           GDK_BUTTON_PRESS_MASK |
-                           GDK_BUTTON_RELEASE_MASK |
-                           GDK_BUTTON1_MOTION_MASK |
-                           GDK_ENTER_NOTIFY_MASK |
-                           GDK_POINTER_MOTION_MASK);
-
-    g_signal_connect(G_OBJECT(viewer), "scroll_event", G_CALLBACK(cb_rstto_picture_viewer_scroll_event), NULL);
-    g_signal_connect(G_OBJECT(viewer), "button_press_event", G_CALLBACK(cb_rstto_picture_viewer_button_press_event), NULL);
-    g_signal_connect(G_OBJECT(viewer), "button_release_event", G_CALLBACK(cb_rstto_picture_viewer_button_release_event), NULL);
-    g_signal_connect(G_OBJECT(viewer), "motion_notify_event", G_CALLBACK(cb_rstto_picture_viewer_motion_notify_event), NULL);
-    g_signal_connect(G_OBJECT(viewer), "popup-menu", G_CALLBACK(cb_rstto_picture_viewer_popup_menu), NULL);
-
-    gtk_drag_dest_set(GTK_WIDGET(viewer), 0, drop_targets, G_N_ELEMENTS(drop_targets),
-                      GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_MOVE | GDK_ACTION_PRIVATE);
-}
-
-/**
- * rstto_picture_viewer_class_init:
- * @viewer_class:
- *
- * Initialize pictureviewer class
- */
-static void
-rstto_picture_viewer_class_init(RsttoPictureViewerClass *viewer_class)
-{
-    GtkWidgetClass *widget_class;
-    GtkObjectClass *object_class;
-
-    widget_class = (GtkWidgetClass*)viewer_class;
-    object_class = (GtkObjectClass*)viewer_class;
-
-    parent_class = g_type_class_peek_parent(viewer_class);
-
-    viewer_class->set_scroll_adjustments = rstto_picture_viewer_set_scroll_adjustments;
-
-    widget_class->realize = rstto_picture_viewer_realize;
-    widget_class->expose_event = rstto_picture_viewer_expose;
-    widget_class->size_request = rstto_picture_viewer_size_request;
-    widget_class->size_allocate = rstto_picture_viewer_size_allocate;
-
-    object_class->destroy = rstto_picture_viewer_destroy;
-
-    widget_class->set_scroll_adjustments_signal =
-                  g_signal_new ("set_scroll_adjustments",
-                                G_TYPE_FROM_CLASS (object_class),
-                                G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-                                G_STRUCT_OFFSET (RsttoPictureViewerClass, set_scroll_adjustments),
-                                NULL, NULL,
-                                rstto_marshal_VOID__OBJECT_OBJECT,
-                                G_TYPE_NONE, 2,
-                                GTK_TYPE_ADJUSTMENT,
-                                GTK_TYPE_ADJUSTMENT);
-}
-
-/**
- * rstto_picture_viewer_realize:
- * @widget:
- *
- */
-static void
-rstto_picture_viewer_realize(GtkWidget *widget)
-{
-    GdkWindowAttr attributes;
-    gint attributes_mask;
-
-    g_return_if_fail (widget != NULL);
-    g_return_if_fail (RSTTO_IS_PICTURE_VIEWER(widget));
-
-    GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
-
-    attributes.x = widget->allocation.x;
-    attributes.y = widget->allocation.y;
-    attributes.width = widget->allocation.width;
-    attributes.height = widget->allocation.height;
-    attributes.wclass = GDK_INPUT_OUTPUT;
-    attributes.window_type = GDK_WINDOW_CHILD;
-    attributes.event_mask = gtk_widget_get_events (widget) | 
-    GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
-    attributes.visual = gtk_widget_get_visual (widget);
-    attributes.colormap = gtk_widget_get_colormap (widget);
-
-    attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-    widget->window = gdk_window_new (gtk_widget_get_parent_window(widget), &attributes, attributes_mask);
-
-    widget->style = gtk_style_attach (widget->style, widget->window);
-    gdk_window_set_user_data (widget->window, widget);
-
-    gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
-}
-
-/**
- * rstto_picture_viewer_size_request:
- * @widget:
- * @requisition:
- *
- * Request a default size of 300 by 400 pixels
- */
-static void
-rstto_picture_viewer_size_request(GtkWidget *widget, GtkRequisition *requisition)
-{
-    requisition->width = 400;
-    requisition->height= 300;
-}
-
-
-/**
- * rstto_picture_viewer_size_allocate:
- * @widget:
- * @allocation:
- *
- *
- */
-static void
-rstto_picture_viewer_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
-{
-    RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER(widget);
-    gint border_width =  0;
-    widget->allocation = *allocation;
-
-    if (GTK_WIDGET_REALIZED (widget))
-    {
-         gdk_window_move_resize (widget->window,
-            allocation->x + border_width,
-            allocation->y + border_width,
-            allocation->width - border_width * 2,
-            allocation->height - border_width * 2);
-    }
-
-    /** 
-     * TODO: Check if we really nead a refresh
-     */
-    rstto_picture_viewer_queued_repaint (viewer, TRUE);
-}
-
-/**
- * rstto_picture_viewer_expose:
- * @widget:
- * @event:
- *
- */
-static gboolean
-rstto_picture_viewer_expose(GtkWidget *widget, GdkEventExpose *event)
-{
-    RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER (widget);
-
-    /** 
-     * TODO: Check if we really nead a refresh
-     */
-    rstto_picture_viewer_queued_repaint (viewer, TRUE);
-    return FALSE;
-}
-
-/**
- * rstto_picture_viewer_paint:
- * @widget:
- *
- * Paint the picture_viewer widget contents
- */
-static void
-rstto_picture_viewer_paint (GtkWidget *widget)
-{
-    RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER(widget);
-    GdkPixbuf *pixbuf = viewer->priv->dst_pixbuf;
-    GdkPixbuf *n_pixbuf = NULL;
-    GdkColor color;
-    GdkColor line_color;
-    gint i, a, height, width;
-    GdkColor *bg_color = NULL;
-    gdouble m_x1, m_x2, m_y1, m_y2;
-    gint x1, x2, y1, y2;
-    GValue val_bg_color = {0, }, val_bg_color_override = {0, }, val_bg_color_fs = {0, };
-    g_value_init (&val_bg_color, GDK_TYPE_COLOR);
-    g_value_init (&val_bg_color_fs, GDK_TYPE_COLOR);
-    g_value_init (&val_bg_color_override, G_TYPE_BOOLEAN);
-
-    g_signal_connect (G_OBJECT(viewer->priv->settings), "notify::bgcolor", G_CALLBACK (cb_rstto_picture_viewer_bgcolor_changed), viewer);
-    g_signal_connect (G_OBJECT(viewer->priv->settings), "notify::bgcolor-override", G_CALLBACK (cb_rstto_picture_viewer_bgcolor_changed), viewer);
-    /*
-    g_signal_connect (G_OBJECT(viewer->priv->settings), "notify::bgcolor-fullscreen", G_CALLBACK (cb_rstto_picture_viewer_bgcolor_changed), viewer);
-    */
-
-    g_object_get_property (G_OBJECT(viewer->priv->settings), "bgcolor", &val_bg_color);
-    g_object_get_property (G_OBJECT(viewer->priv->settings), "bgcolor-override", &val_bg_color_override);
-
-    g_object_get_property (G_OBJECT(viewer->priv->settings), "bgcolor-fullscreen", &val_bg_color_fs);
-
-
-    color.pixel = 0x0;
-    line_color.pixel = 0x0;
-
-    /* required for transparent pixbufs... add double buffering to fix flickering*/
-    if(GTK_WIDGET_REALIZED(widget))
-    {          
-        GdkPixmap *buffer = gdk_pixmap_new(NULL, widget->allocation.width, widget->allocation.height, gdk_drawable_get_depth(widget->window));
-        GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(buffer));
-
-        if(gdk_window_get_state(gdk_window_get_toplevel(GTK_WIDGET(viewer)->window)) & GDK_WINDOW_STATE_FULLSCREEN)
-        {
-           bg_color = g_value_get_boxed (&val_bg_color_fs);
-        }
-        else
-        {
-            if (g_value_get_boxed (&val_bg_color) && g_value_get_boolean (&val_bg_color_override))
-            {
-                bg_color = g_value_get_boxed (&val_bg_color);
-            }
-            else
-            {
-                bg_color = &(widget->style->bg[GTK_STATE_NORMAL]);
-            }
-        }
-        gdk_colormap_alloc_color (gdk_gc_get_colormap (gc), bg_color, FALSE, TRUE);
-        gdk_gc_set_rgb_fg_color (gc, bg_color);
-
-        gdk_draw_rectangle(GDK_DRAWABLE(buffer), gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
-
-        /* Check if there is a destination pixbuf */
-        if(pixbuf)
-        {
-            x1 = (widget->allocation.width-gdk_pixbuf_get_width(pixbuf))<0?0:(widget->allocation.width-gdk_pixbuf_get_width(pixbuf))/2;
-            y1 = (widget->allocation.height-gdk_pixbuf_get_height(pixbuf))<0?0:(widget->allocation.height-gdk_pixbuf_get_height(pixbuf))/2;
-            x2 = gdk_pixbuf_get_width(pixbuf);
-            y2 = gdk_pixbuf_get_height(pixbuf);
-            
-            /* We only need to paint a checkered background if the image is transparent */
-            if(gdk_pixbuf_get_has_alpha(pixbuf))
-            {
-                for(i = 0; i <= x2/10; i++)
-                {
-                    if(i == x2/10)
-                    {
-                        width = x2-10*i;
-                    }
-                    else
-                    {   
-                        width = 10;
-                    }
-                    for(a = 0; a <= y2/10; a++)
-                    {
-                        if(a%2?i%2:!(i%2))
-                            color.pixel = 0xcccccccc;
-                        else
-                            color.pixel = 0xdddddddd;
-                        gdk_gc_set_foreground(gc, &color);
-                        if(a == y2/10)
-                        {
-                            height = y2-10*a;
-                        }
-                        else
-                        {   
-                            height = 10;
-                        }
-
-                        gdk_draw_rectangle(GDK_DRAWABLE(buffer),
-                                        gc,
-                                        TRUE,
-                                        x1+10*i,
-                                        y1+10*a,
-                                        width,
-                                        height);
-                    }
-                }
-            }
-            gdk_draw_pixbuf(GDK_DRAWABLE(buffer), 
-                            NULL, 
-                            pixbuf,
-                            0,
-                            0,
-                            x1,
-                            y1,
-                            x2, 
-                            y2,
-                            GDK_RGB_DITHER_NONE,
-                            0,0);
-            if(viewer->priv->motion.state == RSTTO_PICTURE_VIEWER_MOTION_STATE_BOX_ZOOM)
-            {
-                gdk_gc_set_foreground(gc,
-                        &(widget->style->fg[GTK_STATE_SELECTED]));
-
-                if (viewer->priv->motion.x < viewer->priv->motion.current_x)
-                {
-                    m_x1 = viewer->priv->motion.x;
-                    m_x2 = viewer->priv->motion.current_x;
-                }
-                else
-                {
-                    m_x1 = viewer->priv->motion.current_x;
-                    m_x2 = viewer->priv->motion.x;
-                }
-                if (viewer->priv->motion.y < viewer->priv->motion.current_y)
-                {
-                    m_y1 = viewer->priv->motion.y;
-                    m_y2 = viewer->priv->motion.current_y;
-                }
-                else
-                {
-                    m_y1 = viewer->priv->motion.current_y;
-                    m_y2 = viewer->priv->motion.y;
-                }
-                if (m_y1 < y1)
-                    m_y1 = y1;
-                if (m_x1 < x1)
-                    m_x1 = x1;
-
-                if (m_x2 > x2 + x1)
-                    m_x2 = x2 + x1;
-                if (m_y2 > y2 + y1)
-                    m_y2 = y2 + y1;
-
-                if ((m_x2 - m_x1 >= 2) && (m_y2 - m_y1 >= 2))
-                {
-                    GdkPixbuf *sub = gdk_pixbuf_new_subpixbuf(pixbuf,
-                                                              m_x1-x1,
-                                                              m_y1-y1,
-                                                              m_x2-m_x1,
-                                                              m_y2-m_y1);
-                    if(sub)
-                    {
-                        sub = gdk_pixbuf_composite_color_simple(sub,
-                                                          m_x2-m_x1,
-                                                          m_y2-m_y1,
-                                                          GDK_INTERP_BILINEAR,
-                                                          200,
-                                                          200,
-                                                          widget->style->bg[GTK_STATE_SELECTED].pixel,
-                                                          widget->style->bg[GTK_STATE_SELECTED].pixel);
-
-                        gdk_draw_pixbuf(GDK_DRAWABLE(buffer),
-                                        gc,
-                                        sub,
-                                        0,0,
-                                        m_x1,
-                                        m_y1,
-                                        -1, -1,
-                                        GDK_RGB_DITHER_NONE,
-                                        0, 0);
-
-                        gdk_pixbuf_unref(sub);
-                        sub = NULL;
-                    }
-                }
-
-                gdk_draw_rectangle(GDK_DRAWABLE(buffer),
-                                gc,
-                                FALSE,
-                                m_x1,
-                                m_y1,
-                                m_x2 - m_x1,
-                                m_y2 - m_y1);
-            }
-
-        }
-        else
-        {
-
-            /* HACK HACK HACK HACK */
-            guint size = 0;
-            if ((GTK_WIDGET (viewer)->allocation.width) < (GTK_WIDGET (viewer)->allocation.height))
-            {
-                size = GTK_WIDGET (viewer)->allocation.width;
-            }
-            else
-            {
-                size = GTK_WIDGET (viewer)->allocation.height;
-            }
-            pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default(), 
-                                               "ristretto", 
-                                               (size*0.8),
-                                               GTK_ICON_LOOKUP_FORCE_SIZE, NULL);
-            if (pixbuf)
-            {
-                gdk_pixbuf_saturate_and_pixelate (pixbuf, pixbuf, 0, TRUE);
-                n_pixbuf = gdk_pixbuf_composite_color_simple (pixbuf, (size*0.8), (size*0.8), GDK_INTERP_BILINEAR, 40, 40, bg_color->pixel, bg_color->pixel);
-                g_object_unref (pixbuf);
-                pixbuf = n_pixbuf;
-
-                x1 = (widget->allocation.width-gdk_pixbuf_get_width(pixbuf))<0?0:(widget->allocation.width-gdk_pixbuf_get_width(pixbuf))/2;
-                y1 = (widget->allocation.height-gdk_pixbuf_get_height(pixbuf))<0?0:(widget->allocation.height-gdk_pixbuf_get_height(pixbuf))/2;
-                x2 = gdk_pixbuf_get_width(pixbuf);
-                y2 = gdk_pixbuf_get_height(pixbuf);
-
-                gdk_draw_pixbuf(GDK_DRAWABLE(buffer), 
-                                NULL, 
-                                pixbuf,
-                                0,
-                                0,
-                                x1,
-                                y1,
-                                x2, 
-                                y2,
-                                GDK_RGB_DITHER_NONE,
-                                0,0);
-            }
-        }
-        gdk_draw_drawable(GDK_DRAWABLE(widget->window), 
-                        gdk_gc_new(widget->window), 
-                        buffer,
-                        0,
-                        0,
-                        0,
-                        0,
-                        widget->allocation.width,
-                        widget->allocation.height);
-        g_object_unref(buffer);
-   }
-}
-
-static void
-rstto_picture_viewer_destroy(GtkObject *object)
-{
-    if (RSTTO_PICTURE_VIEWER (object)->priv->settings)
-    {
-        g_object_unref (RSTTO_PICTURE_VIEWER (object)->priv->settings);
-        RSTTO_PICTURE_VIEWER (object)->priv->settings = NULL;
-    }
-}
-
-static gboolean  
-rstto_picture_viewer_set_scroll_adjustments(RsttoPictureViewer *viewer, GtkAdjustment *hadjustment, GtkAdjustment *vadjustment)
-{
-    if(viewer->hadjustment)
-    {
-        g_signal_handlers_disconnect_by_func(viewer->hadjustment, viewer->priv->cb_value_changed, viewer);
-        g_object_unref(viewer->hadjustment);
-    }
-    if(viewer->vadjustment)
-    {
-        g_signal_handlers_disconnect_by_func(viewer->vadjustment, viewer->priv->cb_value_changed, viewer);
-        g_object_unref(viewer->vadjustment);
-    }
-
-    viewer->hadjustment = hadjustment;
-    viewer->vadjustment = vadjustment;
-
-    if(viewer->hadjustment)
-    {
-        g_signal_connect(G_OBJECT(viewer->hadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
-        g_object_ref(viewer->hadjustment);
-    }
-    if(viewer->vadjustment)
-    {
-        g_signal_connect(G_OBJECT(viewer->vadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
-        g_object_ref(viewer->vadjustment);
-    }
-    return TRUE;
-}
-
-static void
-cb_rstto_picture_viewer_value_changed(GtkAdjustment *adjustment, RsttoPictureViewer *viewer)
-{
-    /** 
-     * A new subpixbuf needs to be blown up
-     */
-    rstto_picture_viewer_queued_repaint (viewer, TRUE);
-}
-
-GtkWidget *
-rstto_picture_viewer_new (void)
-{
-    GtkWidget *widget;
-
-    widget = g_object_new(RSTTO_TYPE_PICTURE_VIEWER, NULL);
-
-    return widget;
-}
-
-void
-rstto_picture_viewer_set_scale (RsttoPictureViewer *viewer, gdouble scale)
-{
-    gdouble *img_scale;
-    GdkPixbuf *src_pixbuf = NULL;
-
-    if (viewer->priv->image)
-    {
-        src_pixbuf = rstto_image_get_pixbuf (viewer->priv->image);
-        img_scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
-
-        if (src_pixbuf)
-        {
-            gdouble image_width = (gdouble)rstto_image_get_width (viewer->priv->image);
-            gdouble image_height = (gdouble)rstto_image_get_height (viewer->priv->image);
-
-            viewer->hadjustment->upper = image_width *scale;
-            gtk_adjustment_changed(viewer->hadjustment);
-
-            viewer->vadjustment->upper = image_height * scale;
-            gtk_adjustment_changed(viewer->vadjustment);
-
-            viewer->hadjustment->value = (((viewer->hadjustment->value +
-                                          (viewer->hadjustment->page_size / 2)) *
-                                           (scale)) / (*img_scale)) - (viewer->hadjustment->page_size / 2);
-            viewer->vadjustment->value = (((viewer->vadjustment->value +
-                                          (viewer->vadjustment->page_size / 2)) *
-                                           (scale)) / (*img_scale)) - (viewer->vadjustment->page_size / 2);
-
-            if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
-            {
-                viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
-            }
-            if(viewer->hadjustment->value < viewer->hadjustment->lower)
-            {
-                viewer->hadjustment->value = viewer->hadjustment->lower;
-            }
-            if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
-            {
-                viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
-            }
-            if(viewer->vadjustment->value < viewer->vadjustment->lower)
-            {
-                viewer->vadjustment->value = viewer->vadjustment->lower;
-            }
-
-            gtk_adjustment_value_changed(viewer->hadjustment);
-            gtk_adjustment_value_changed(viewer->vadjustment);
-
-            /** 
-             * Set these settings at the end of the function, 
-             * since the old and new values are required in the above code
-             */
-            *img_scale = scale;
-            g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-scale", img_scale);
-
-            rstto_image_load (viewer->priv->image, TRUE, scale, FALSE, NULL);
-
-            rstto_picture_viewer_queued_repaint (viewer, TRUE);
-        }
-        else
-        {
-            /* If there is no image, set the adjustments to 0 */
-            viewer->hadjustment->upper = 0;
-            viewer->hadjustment->lower = 0;
-            viewer->hadjustment->value = 0;
-            viewer->vadjustment->upper = 0;
-            viewer->vadjustment->lower = 0;
-            viewer->vadjustment->value = 0;
-
-            gtk_adjustment_changed(viewer->hadjustment);
-            gtk_adjustment_changed(viewer->vadjustment);
-
-            gtk_adjustment_value_changed(viewer->hadjustment);
-            gtk_adjustment_value_changed(viewer->vadjustment);
-        }
-    }
-}
-
-gdouble
-rstto_picture_viewer_get_scale(RsttoPictureViewer *viewer)
-{
-    gdouble *scale;
-    if (viewer->priv->image)
-    {
-        scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
-        return *scale;
-    }
-    return 0;
-}
-
-/**
- * rstto_picture_viewer_calculate_scale:
- * @viewer:
- *
- */
-static gdouble
-rstto_picture_viewer_calculate_scale (RsttoPictureViewer *viewer)
-{
-    gint width = 0, height = 0;
-
-    if (viewer->priv->image != NULL)
-    {   
-        switch(rstto_image_get_orientation (viewer->priv->image))
-        {
-            default:
-                width = rstto_image_get_width (viewer->priv->image);
-                height = rstto_image_get_height (viewer->priv->image);
-                break;
-            case RSTTO_IMAGE_ORIENT_270:
-            case RSTTO_IMAGE_ORIENT_90:
-                height = rstto_image_get_width (viewer->priv->image);
-                width = rstto_image_get_height (viewer->priv->image);
-                break;
-        }
-    }
-
-    if (width > 0 && height > 0)
-    {
-        if ((gdouble)(GTK_WIDGET (viewer)->allocation.width / (gdouble)width) <
-            ((gdouble)GTK_WIDGET (viewer)->allocation.height / (gdouble)height))
-        {
-            return (gdouble)GTK_WIDGET (viewer)->allocation.width / (gdouble)width;
-        }
-        else
-        {
-            return (gdouble)GTK_WIDGET (viewer)->allocation.height / (gdouble)height;
-        }
-    }
-    return -1;
-}
-
-static void
-cb_rstto_picture_viewer_scroll_event (RsttoPictureViewer *viewer, GdkEventScroll *event)
-{
-    gchar *scrollwheel_action = NULL; 
-    gdouble *p_scale = NULL;
-    gboolean *p_fit_to_screen= NULL;
-
-    scrollwheel_action = rstto_settings_get_string_property (viewer->priv->settings, "scrollwheel-primary-action");
-
-    if (scrollwheel_action)
-    {
-        /** Zoom **/
-        if (!strcmp (scrollwheel_action, "zoom"))
-        {
-            viewer->priv->zoom_mode = RSTTO_ZOOM_MODE_CUSTOM;
-            p_scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
-            p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
-            *p_fit_to_screen = FALSE;
-            switch(event->direction)
-            {
-                case GDK_SCROLL_UP:
-                case GDK_SCROLL_LEFT:
-                    if (*p_scale <= 0.05)
-                        return;
-                    if (viewer->priv->repaint.idle_id > 0)
-                    {
-                        g_source_remove(viewer->priv->repaint.idle_id);
-                    }
-
-                    *p_scale = *p_scale / 1.1;
-                    viewer->vadjustment->value = ((viewer->vadjustment->value + event->y) / 1.1) - event->y;
-                    viewer->hadjustment->value = ((viewer->hadjustment->value + event->x) / 1.1) - event->x;
-
-                    break;
-                case GDK_SCROLL_DOWN:
-                case GDK_SCROLL_RIGHT:
-                    if (*p_scale >= 16.0)
-                        return;
-                    if (viewer->priv->repaint.idle_id > 0)
-                    {
-                        g_source_remove(viewer->priv->repaint.idle_id);
-                    }
-
-                    *p_scale = *p_scale * 1.1;
-
-                    viewer->vadjustment->value = ((viewer->vadjustment->value + event->y) * 1.1) - event->y;
-                    viewer->hadjustment->value = ((viewer->hadjustment->value + event->x) * 1.1) - event->x;
-
-                    break;
-            }
-
-            rstto_picture_viewer_set_scale (viewer, *p_scale);
-            gtk_adjustment_value_changed(viewer->hadjustment);
-            gtk_adjustment_value_changed(viewer->vadjustment);
-            viewer->priv->repaint.idle_id = g_idle_add((GSourceFunc)cb_rstto_picture_viewer_queued_repaint, viewer);
-        }
-
-        /** Navigate **/
-        if (!strcmp (scrollwheel_action, "switch"))
-        {
-            viewer->priv->zoom_mode = RSTTO_ZOOM_MODE_CUSTOM;
-            switch(event->direction)
-            {
-                case GDK_SCROLL_UP:
-                case GDK_SCROLL_LEFT:
-                    rstto_image_list_iter_previous (viewer->priv->iter);
-                    break;
-                case GDK_SCROLL_DOWN:
-                case GDK_SCROLL_RIGHT:
-                    rstto_image_list_iter_next (viewer->priv->iter);
-                    break;
-            }
-        }
-    }
-}
-
-static gboolean 
-cb_rstto_picture_viewer_motion_notify_event (RsttoPictureViewer *viewer,
-                                             GdkEventMotion *event,
-                                             gpointer user_data)
-{
-    if (event->state & GDK_BUTTON1_MASK)
-    {
-        viewer->priv->motion.current_x = event->x;
-        viewer->priv->motion.current_y = event->y;
-
-        switch (viewer->priv->motion.state)
-        {
-            case RSTTO_PICTURE_VIEWER_MOTION_STATE_MOVE:
-                if (viewer->priv->motion.x != viewer->priv->motion.current_x)
-                {
-                    gint val = viewer->hadjustment->value;
-                    viewer->hadjustment->value = viewer->priv->motion.h_val + (viewer->priv->motion.x - viewer->priv->motion.current_x);
-                    if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
-                    {
-                        viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
-                    }
-                    if((viewer->hadjustment->value) < viewer->hadjustment->lower)
-                    {
-                        viewer->hadjustment->value = viewer->hadjustment->lower;
-                    }
-                    if (val != viewer->hadjustment->value)
-                        gtk_adjustment_value_changed(viewer->hadjustment);
-                }
-
-                if (viewer->priv->motion.y != viewer->priv->motion.current_y)
-                {
-                    gint val = viewer->vadjustment->value;
-                    viewer->vadjustment->value = viewer->priv->motion.v_val + (viewer->priv->motion.y - viewer->priv->motion.current_y);
-                    if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
-                    {
-                        viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
-                    }
-                    if((viewer->vadjustment->value) < viewer->vadjustment->lower)
-                    {
-                        viewer->vadjustment->value = viewer->vadjustment->lower;
-                    }
-                    if (val != viewer->vadjustment->value)
-                        gtk_adjustment_value_changed(viewer->vadjustment);
-                }
-                break;
-            case RSTTO_PICTURE_VIEWER_MOTION_STATE_BOX_ZOOM:
-                rstto_picture_viewer_queued_repaint (viewer, FALSE);
-                break;
-            default:
-                break;
-        }
-    }
-    return FALSE;
-}
-
-static void
-rstto_picture_viewer_calculate_adjustments (RsttoPictureViewer *viewer, gdouble scale)
-{
-    GdkPixbuf *p_src_pixbuf = NULL;
-    GtkWidget *widget = GTK_WIDGET (viewer);
-    gdouble image_width, image_height;
-    gdouble pixbuf_width, pixbuf_height;
-    gdouble image_scale;
-    gboolean vadjustment_changed = FALSE;
-    gboolean hadjustment_changed = FALSE;
-
-    if (viewer->priv->image != NULL)
-    {   
-        p_src_pixbuf = rstto_image_get_pixbuf (viewer->priv->image);
-        if (p_src_pixbuf != NULL)
-        {
-            image_width = (gdouble)rstto_image_get_width (viewer->priv->image);
-            image_height = (gdouble)rstto_image_get_height (viewer->priv->image);
-
-            pixbuf_width = (gdouble)gdk_pixbuf_get_width (p_src_pixbuf);
-            pixbuf_height = (gdouble)gdk_pixbuf_get_height (p_src_pixbuf);
-
-            image_scale = pixbuf_width / image_width;
-
-            switch (rstto_image_get_orientation (viewer->priv->image))
-            {
-                default:
-                    if(viewer->hadjustment)
-                    {
-                        viewer->hadjustment->page_size = widget->allocation.width / image_scale;
-                        viewer->hadjustment->upper = image_width * (scale / image_scale);
-                        viewer->hadjustment->lower = 0;
-                        viewer->hadjustment->step_increment = 1;
-                        viewer->hadjustment->page_increment = 100;
-                        if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
-                        {
-                            viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
-                            hadjustment_changed = TRUE;
-                        }
-                        if(viewer->hadjustment->value < viewer->hadjustment->lower)
-                        {
-                            viewer->hadjustment->value = viewer->hadjustment->lower;
-                            hadjustment_changed = TRUE;
-                        }
-                    }
-                    if(viewer->vadjustment)
-                    {
-                        viewer->vadjustment->page_size = widget->allocation.height / image_scale;
-                        viewer->vadjustment->upper = image_height * (scale / image_scale);
-                        viewer->vadjustment->lower = 0;
-                        viewer->vadjustment->step_increment = 1;
-                        viewer->vadjustment->page_increment = 100;
-                        if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
-                        {
-                            viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
-                            vadjustment_changed = TRUE;
-                        }
-                        if(viewer->vadjustment->value < viewer->vadjustment->lower)
-                        {
-                            viewer->vadjustment->value = viewer->vadjustment->lower;
-                            vadjustment_changed = TRUE;
-                        }
-                    }
-                    break;
-                case RSTTO_IMAGE_ORIENT_270:
-                case RSTTO_IMAGE_ORIENT_90:
-                    if(viewer->hadjustment)
-                    {
-                        viewer->hadjustment->page_size = widget->allocation.width / image_scale;
-                        viewer->hadjustment->upper = image_height * (scale / image_scale);
-                        viewer->hadjustment->lower = 0;
-                        viewer->hadjustment->step_increment = 1;
-                        viewer->hadjustment->page_increment = 100;
-                        if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
-                        {
-                            viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
-                            hadjustment_changed = TRUE;
-                        }
-                        if(viewer->hadjustment->value < viewer->hadjustment->lower)
-                        {
-                            viewer->hadjustment->value = viewer->hadjustment->lower;
-                            hadjustment_changed = TRUE;
-                        }
-                    }
-                    if(viewer->vadjustment)
-                    {
-                        viewer->vadjustment->page_size = widget->allocation.height / image_scale;
-                        viewer->vadjustment->upper = image_width * (scale / image_scale);
-                        viewer->vadjustment->lower = 0;
-                        viewer->vadjustment->step_increment = 1;
-                        viewer->vadjustment->page_increment = 100;
-                        if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
-                        {
-                            viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
-                            vadjustment_changed = TRUE;
-                        }
-                        if(viewer->vadjustment->value < viewer->vadjustment->lower)
-                        {
-                            viewer->vadjustment->value = viewer->vadjustment->lower;
-                            vadjustment_changed = TRUE;
-                        }
-                    }
-                    break;
-            }
-
-            if (viewer->vadjustment && viewer->hadjustment)
-            {
-                gtk_adjustment_changed(viewer->hadjustment);
-                gtk_adjustment_changed(viewer->vadjustment);
-            }
-            if (hadjustment_changed == TRUE)
-                gtk_adjustment_value_changed(viewer->hadjustment);
-            if (vadjustment_changed == TRUE)
-                gtk_adjustment_value_changed(viewer->vadjustment);
-        }
-    }
-
-}
-
-static void
-rstto_picture_viewer_queued_repaint (RsttoPictureViewer *viewer, gboolean refresh)
-{
-    if (viewer->priv->repaint.idle_id > 0)
-    {
-        g_source_remove(viewer->priv->repaint.idle_id);
-    }
-    if (refresh)
-    {
-        viewer->priv->repaint.refresh = TRUE;
-    }
-    viewer->priv->repaint.idle_id = g_idle_add((GSourceFunc)cb_rstto_picture_viewer_queued_repaint, viewer);
-}
-
-static gboolean 
-cb_rstto_picture_viewer_queued_repaint (RsttoPictureViewer *viewer)
-{
-    GdkPixbuf *p_src_pixbuf = NULL;
-    GdkPixbuf *p_tmp_pixbuf = NULL;
-    GdkPixbuf *p_tmp_pixbuf2 = NULL;
-    gdouble *p_scale = NULL;
-    gboolean *p_fit_to_screen= NULL;
-    gdouble scale = 1;
-    gdouble image_scale = 1;
-    gdouble thumb_scale = 1;
-    gdouble thumb_width = 0;
-    gboolean fit_to_screen = FALSE;
-    gboolean show_preview = rstto_settings_get_boolean_property (viewer->priv->settings, "show-preview");
-    gdouble image_width = 0, image_height = 0;
-    gdouble pixbuf_width, pixbuf_height;
-    GtkWidget *widget = GTK_WIDGET (viewer);
-
-    if (viewer->priv->image != NULL)
-    {   
-        image_width = (gdouble)rstto_image_get_width (viewer->priv->image);
-        image_height = (gdouble)rstto_image_get_height (viewer->priv->image);
-
-        switch (viewer->priv->state)
-        {
-            case RSTTO_PICTURE_VIEWER_STATE_NORMAL:
-                p_src_pixbuf = rstto_image_get_pixbuf (viewer->priv->image);
-                if (p_src_pixbuf)
-                {
-                    pixbuf_width = (gdouble)gdk_pixbuf_get_width (p_src_pixbuf);
-                    pixbuf_height = (gdouble)gdk_pixbuf_get_height (p_src_pixbuf);
-
-                    image_scale = pixbuf_width / image_width;
-                }
-                break;
-            case RSTTO_PICTURE_VIEWER_STATE_PREVIEW:
-                if (show_preview == TRUE)
-                {
-                    p_src_pixbuf = rstto_image_get_thumbnail (viewer->priv->image);
-                    if (p_src_pixbuf)
-                    {
-                        thumb_width = (gdouble)gdk_pixbuf_get_width (p_src_pixbuf);
-                        thumb_scale = (thumb_width / image_width);
-                    }
-                    else
-                        return FALSE;
-                }
-                break;
-            default:
-                break;
-        }
-
-        p_scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
-        p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
-        scale = *p_scale;
-        fit_to_screen = *p_fit_to_screen;
-
-        if (scale <= 0.0)
-        {
-            scale = rstto_picture_viewer_calculate_scale (viewer);
-            if (scale > 1.0)
-            {
-                scale = 1.0;
-                fit_to_screen = FALSE;
-            }
-            else
-                fit_to_screen = TRUE;
-        }
-        if (fit_to_screen == TRUE)
-        {
-            scale = rstto_picture_viewer_calculate_scale (viewer);
-        }
-        *p_fit_to_screen = fit_to_screen;
-        *p_scale = scale;
-    }
-
-
-    rstto_picture_viewer_calculate_adjustments (viewer, scale);
-
-
-    if (viewer->priv->repaint.refresh)
-    {
-        if(viewer->priv->dst_pixbuf)
-        {
-            g_object_unref(viewer->priv->dst_pixbuf);
-            viewer->priv->dst_pixbuf = NULL;
-        }
-        if (p_src_pixbuf)
-        {
-            gdouble x, y;
-
-            switch (rstto_image_get_orientation (viewer->priv->image))
-            {
-                default:
-                case RSTTO_IMAGE_ORIENT_NONE:
-                    x = viewer->hadjustment->value * image_scale;
-                    y = viewer->vadjustment->value * image_scale;
-                    p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
-                                               (gint)(x/scale * thumb_scale * image_scale), 
-                                               (gint)(y/scale * thumb_scale * image_scale),
-                                               (gint)((widget->allocation.width / scale) < image_width?
-                                                      (widget->allocation.width / scale)*thumb_scale*image_scale:image_width*thumb_scale*image_scale),
-                                               (gint)((widget->allocation.height / scale) < image_height?
-                                                      (widget->allocation.height / scale)*image_scale*thumb_scale:image_height*thumb_scale*image_scale));
-                    break;
-                case RSTTO_IMAGE_ORIENT_90:
-                    x = viewer->vadjustment->value * image_scale;
-                    y = (viewer->hadjustment->upper - (viewer->hadjustment->value + viewer->hadjustment->page_size)) * image_scale;
-                    if (y < 0) y = 0;
-                    //y = viewer->hadjustment->value * image_scale;
-                    p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
-                                               (gint)(x/scale * thumb_scale * image_scale), 
-                                               (gint)(y/scale * thumb_scale * image_scale),
-                                               (gint)((widget->allocation.height/ scale) < image_width?
-                                                      (widget->allocation.height/ scale)*thumb_scale*image_scale:image_width*thumb_scale*image_scale),
-                                               (gint)((widget->allocation.width/ scale) < image_height?
-                                                      (widget->allocation.width/ scale)*image_scale*thumb_scale:image_height*thumb_scale*image_scale));
-                    if (p_tmp_pixbuf)
-                    {
-                        p_tmp_pixbuf2 = gdk_pixbuf_rotate_simple (p_tmp_pixbuf, GDK_PIXBUF_ROTATE_CLOCKWISE);
-                        g_object_unref (p_tmp_pixbuf);
-                        p_tmp_pixbuf = p_tmp_pixbuf2;
-                    }
-                    break;
-                case RSTTO_IMAGE_ORIENT_180:
-                    x = (viewer->hadjustment->upper - (viewer->hadjustment->value + viewer->hadjustment->page_size)) * image_scale;
-                    if (x < 0) x = 0;
-                    y = (viewer->vadjustment->upper - (viewer->vadjustment->value + viewer->vadjustment->page_size)) * image_scale;
-                    if (y < 0) y = 0;
-                    //y = viewer->hadjustment->value * image_scale;
-                    p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
-                                               (gint)(x/scale * thumb_scale * image_scale), 
-                                               (gint)(y/scale * thumb_scale * image_scale),
-                                               (gint)((widget->allocation.width / scale) < image_width?
-                                                      (widget->allocation.width / scale)*thumb_scale*image_scale:image_width*thumb_scale*image_scale),
-                                               (gint)((widget->allocation.height/ scale) < image_width?
-                                                      (widget->allocation.height/ scale)*image_scale*thumb_scale:image_height*thumb_scale*image_scale));
-                    if (p_tmp_pixbuf)
-                    {
-                        p_tmp_pixbuf2 = gdk_pixbuf_rotate_simple (p_tmp_pixbuf, GDK_PIXBUF_ROTATE_UPSIDEDOWN);
-                        g_object_unref (p_tmp_pixbuf);
-                        p_tmp_pixbuf = p_tmp_pixbuf2;
-                    }
-                    break;
-                case RSTTO_IMAGE_ORIENT_270:
-                    x = (viewer->vadjustment->upper - (viewer->vadjustment->value + viewer->vadjustment->page_size)) * image_scale;
-                    if (x < 0) x = 0;
-                    y = viewer->hadjustment->value * image_scale;
-                    p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
-                                               (gint)(x/scale * thumb_scale * image_scale), 
-                                               (gint)(y/scale * thumb_scale * image_scale),
-                                               (gint)((widget->allocation.height/ scale) < image_width?
-                                                      (widget->allocation.height/ scale)*thumb_scale*image_scale:image_width*thumb_scale*image_scale),
-                                               (gint)((widget->allocation.width/ scale) < image_height?
-                                                      (widget->allocation.width/ scale)*image_scale*thumb_scale:image_height*thumb_scale*image_scale));
-                    if (p_tmp_pixbuf)
-                    {
-                        p_tmp_pixbuf2 = gdk_pixbuf_rotate_simple (p_tmp_pixbuf, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE);
-                        g_object_unref (p_tmp_pixbuf);
-                        p_tmp_pixbuf = p_tmp_pixbuf2;
-                    }
-                    break;
-            }
-            /**
-             *  tmp_scale is the factor between the original image and the thumbnail,
-             *  when looking at the actual image, tmp_scale == 1.0
-             */
-            /*
-            gdouble x = viewer->hadjustment->value * image_scale;
-            gdouble y = viewer->vadjustment->value * image_scale;
-
-            p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
-                                               (gint)(x/scale * thumb_scale * image_scale), 
-                                               (gint)(y/scale * thumb_scale * image_scale),
-                                               (gint)((widget->allocation.width / scale) < image_width?
-                                                      (widget->allocation.width / scale)*thumb_scale*image_scale:image_width*thumb_scale*image_scale),
-                                               (gint)((widget->allocation.height / scale) < image_height?
-                                                      (widget->allocation.height / scale)*image_scale*thumb_scale:image_height*thumb_scale*image_scale));
-            */
-
-            if(p_tmp_pixbuf)
-            {
-                gint dst_width = gdk_pixbuf_get_width (p_tmp_pixbuf)*(scale/thumb_scale/image_scale);
-                gint dst_height = gdk_pixbuf_get_height (p_tmp_pixbuf)*(scale/thumb_scale/image_scale);
-                viewer->priv->dst_pixbuf = gdk_pixbuf_scale_simple (p_tmp_pixbuf,
-                                        dst_width>0?dst_width:1,
-                                        dst_height>0?dst_height:1,
-                                        GDK_INTERP_BILINEAR);
-                g_object_unref (p_tmp_pixbuf);
-                p_tmp_pixbuf = NULL;
-            }
-        }
-    }
-
-
-    rstto_picture_viewer_paint (GTK_WIDGET (viewer));
-
-    g_source_remove (viewer->priv->repaint.idle_id);
-    viewer->priv->repaint.idle_id = -1;
-    viewer->priv->repaint.refresh = FALSE;
-    return FALSE;
-}
-
-static RsttoPictureViewerState
-rstto_picture_viewer_get_state (RsttoPictureViewer *viewer)
-{
-    return viewer->priv->state;
-}
-
-
-static void
-rstto_picture_viewer_set_state (RsttoPictureViewer *viewer, RsttoPictureViewerState state)
-{
-    viewer->priv->state = state;
-}
-
-static void
-rstto_picture_viewer_set_motion_state (RsttoPictureViewer *viewer, RsttoPictureViewerMotionState state)
-{
-    viewer->priv->motion.state = state;
-}
-
-static RsttoPictureViewerMotionState
-rstto_picture_viewer_get_motion_state (RsttoPictureViewer *viewer)
-{
-    return viewer->priv->motion.state;
-}
-
-static void
-cb_rstto_picture_viewer_button_press_event (RsttoPictureViewer *viewer, GdkEventButton *event)
-{
-    if(event->button == 1)
-    {
-        viewer->priv->motion.x = event->x;
-        viewer->priv->motion.y = event->y;
-        viewer->priv->motion.current_x = event->x;
-        viewer->priv->motion.current_y = event->y;
-        viewer->priv->motion.h_val = viewer->hadjustment->value;
-        viewer->priv->motion.v_val = viewer->vadjustment->value;
-
-        if (viewer->priv->image != NULL && rstto_picture_viewer_get_state (viewer) == RSTTO_PICTURE_VIEWER_STATE_NORMAL)
-        {
-
-            if (!(event->state & (GDK_CONTROL_MASK)))
-            {
-                GtkWidget *widget = GTK_WIDGET(viewer);
-                GdkCursor *cursor = gdk_cursor_new(GDK_FLEUR);
-                gdk_window_set_cursor(widget->window, cursor);
-                gdk_cursor_unref(cursor);
-
-                rstto_picture_viewer_set_motion_state (viewer, RSTTO_PICTURE_VIEWER_MOTION_STATE_MOVE);
-            }
-
-            if (event->state & GDK_CONTROL_MASK)
-            {
-                GtkWidget *widget = GTK_WIDGET(viewer);
-                GdkCursor *cursor = gdk_cursor_new(GDK_UL_ANGLE);
-                gdk_window_set_cursor(widget->window, cursor);
-                gdk_cursor_unref(cursor);
-
-                rstto_picture_viewer_set_motion_state (viewer, RSTTO_PICTURE_VIEWER_MOTION_STATE_BOX_ZOOM);
-            }
-        }
-
-        
-    }
-    if(event->button == 3)
-    {
-        if (viewer->priv->menu)
-        {
-            gtk_widget_show_all(GTK_WIDGET(viewer->priv->menu));
-            gtk_menu_popup(viewer->priv->menu,
-                           NULL,
-                           NULL,
-                           NULL,
-                           NULL,
-                           3,
-                           event->time);
-        }
-    }
-}
-
-static void
-cb_rstto_picture_viewer_button_release_event (RsttoPictureViewer *viewer, GdkEventButton *event)
-{
-    gdouble *scale, old_scale, img_scale;
-    gboolean *fit_to_screen;
-    gdouble width, height, image_width, image_height;
-    GtkWidget *widget = GTK_WIDGET(viewer);
-    GdkPixbuf *p_src_pixbuf = NULL;
-
-    switch (event->button)
-    {
-        case 1:
-            gdk_window_set_cursor(widget->window, NULL);
-            switch (rstto_picture_viewer_get_motion_state (viewer))
-            {
-                case RSTTO_PICTURE_VIEWER_MOTION_STATE_BOX_ZOOM:
-                    rstto_picture_viewer_set_zoom_mode (viewer, RSTTO_ZOOM_MODE_CUSTOM);
-                    if(GTK_WIDGET_REALIZED(widget))
-                    {
-                        scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
-                        old_scale = *scale;
-                        p_src_pixbuf = rstto_image_get_pixbuf (viewer->priv->image);
-                        if (p_src_pixbuf)
-                        {
-                            width = (gdouble)gdk_pixbuf_get_width (p_src_pixbuf);
-                            height = (gdouble)gdk_pixbuf_get_height (p_src_pixbuf);
-                        }
-                        else
-                            return;
-                        image_width = rstto_image_get_width(viewer->priv->image);
-                        image_height = rstto_image_get_height(viewer->priv->image);
-
-                        img_scale = width / image_width;
-
-                        gdouble d_width = (gdouble)gdk_pixbuf_get_width(viewer->priv->dst_pixbuf);
-                        gdouble d_height = (gdouble)gdk_pixbuf_get_height(viewer->priv->dst_pixbuf);
-
-                        gdouble box_width, box_height;
-                        gdouble top_left_x, top_left_y;
-
-                        if (viewer->priv->motion.x < viewer->priv->motion.current_x)
-                        {
-                            gint x_offset = (widget->allocation.width - d_width)<=0?0:((widget->allocation.width - d_width)/2);
-                            top_left_x = viewer->priv->motion.x - x_offset + (viewer->hadjustment->value * *scale);
-                            box_width = viewer->priv->motion.current_x - viewer->priv->motion.x;
-                        }
-                        else
-                        {
-                            gint x_offset = (widget->allocation.width - d_width)<=0?0:((widget->allocation.width - d_width)/2);
-                            top_left_x = viewer->priv->motion.current_x - x_offset + (viewer->hadjustment->value * *scale);
-                            box_width = viewer->priv->motion.x - viewer->priv->motion.current_x;
-                        }
-                        if (viewer->priv->motion.y < viewer->priv->motion.current_y)
-                        {
-                            gint y_offset = (widget->allocation.height - d_height)<=0?0:((widget->allocation.height - d_height)/2);
-                            top_left_y = viewer->priv->motion.y - y_offset + (viewer->vadjustment->value * *scale);
-                            box_height = viewer->priv->motion.current_y - viewer->priv->motion.y;
-                        }
-                        else
-                        {
-                            gint y_offset = (widget->allocation.height - d_height) <=0?0:((widget->allocation.height - d_height)/2);
-                            top_left_y = viewer->priv->motion.y - y_offset + (viewer->vadjustment->value * *scale);
-                            box_height = viewer->priv->motion.y - viewer->priv->motion.current_y;
-                        }
-
-                        gdouble h_scale = widget->allocation.width / box_width * *scale;
-                        gdouble v_scale = widget->allocation.height / box_height * *scale;
-
-                        /** 
-                         * Check if the mouse has been moved (and there exists a box
-                         */
-                        if (box_height > 1 && box_width > 1)
-                        {
-                            if (h_scale < v_scale)
-                            {
-                                *scale = h_scale;
-                                gdouble d_box_height = box_height * v_scale / h_scale;
-                                top_left_y -= (d_box_height - box_height) / 2;
-                                box_height = d_box_height;
-                            }
-                            else
-                            {
-                                *scale = v_scale;
-                                gdouble d_box_width = box_width * h_scale / v_scale;
-                                top_left_x -= (d_box_width - box_width) / 2;
-                                box_width = d_box_width;
-                            }
-
-                            g_object_set_data (G_OBJECT(viewer->priv->image), "viewer-scale", scale);
-                            rstto_picture_viewer_set_scale(viewer, *scale);
-
-                            if(viewer->hadjustment)
-                            {
-                                viewer->hadjustment->page_size = (box_width / old_scale * *scale) / img_scale;
-                                viewer->hadjustment->upper = (image_width * *scale) / img_scale;
-                                viewer->hadjustment->lower = 0;
-                                viewer->hadjustment->step_increment = 1;
-                                viewer->hadjustment->page_increment = 100;
-                                viewer->hadjustment->value = (top_left_x / old_scale * *scale) / img_scale;
-                                if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
-                                {
-                                    viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
-                                }
-                                if(viewer->hadjustment->value < viewer->hadjustment->lower)
-                                {
-                                    viewer->hadjustment->value = viewer->hadjustment->lower;
-                                }
-                                gtk_adjustment_changed(viewer->hadjustment);
-                                gtk_adjustment_value_changed(viewer->hadjustment);
-                            }
-                            if(viewer->vadjustment)
-                            { 
-                                viewer->vadjustment->page_size = (box_height /old_scale* *scale) / img_scale;
-                                viewer->vadjustment->upper = (image_height * *scale) / img_scale;
-                                viewer->vadjustment->lower = 0;
-                                viewer->vadjustment->step_increment = 1;
-                                viewer->vadjustment->page_increment = 100;
-                                viewer->vadjustment->value = (top_left_y / old_scale * *scale) / img_scale;
-                                if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
-                                {
-                                    viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
-                                }
-                                if(viewer->vadjustment->value < viewer->vadjustment->lower)
-                                {
-                                    viewer->vadjustment->value = viewer->vadjustment->lower;
-                                }
-                                gtk_adjustment_changed(viewer->vadjustment);
-                                gtk_adjustment_value_changed(viewer->vadjustment);
-                            }
-                        }
-                    }
-                    if (viewer->priv->repaint.idle_id > 0)
-                    {
-                        g_source_remove(viewer->priv->repaint.idle_id);
-                    }
-                    viewer->priv->repaint.idle_id = g_idle_add((GSourceFunc)cb_rstto_picture_viewer_queued_repaint, viewer);
-                    break;
-                default:
-                    break;
-            }
-            rstto_picture_viewer_set_motion_state (viewer, RSTTO_PICTURE_VIEWER_MOTION_STATE_NORMAL);
-            rstto_picture_viewer_queued_repaint (viewer, FALSE);
-            break;
-    }
-
-}
-
-static void
-cb_rstto_picture_viewer_popup_menu (RsttoPictureViewer *viewer, gboolean user_data)
-{
-    if (viewer->priv->menu)
-    {
-        gtk_widget_show_all(GTK_WIDGET(viewer->priv->menu));
-        gtk_menu_popup(viewer->priv->menu,
-                       NULL,
-                       NULL,
-                       NULL,
-                       NULL,
-                       0,
-                       gtk_get_current_event_time());
-    }
-}
-
-void
-rstto_picture_viewer_set_menu (RsttoPictureViewer *viewer, GtkMenu *menu)
-{
-    if (viewer->priv->menu)
-    {
-        gtk_menu_detach (viewer->priv->menu);
-        gtk_widget_destroy (GTK_WIDGET(viewer->priv->menu));
-    }
-
-    viewer->priv->menu = menu;
-
-    if (viewer->priv->menu)
-    {
-        gtk_menu_attach_to_widget (viewer->priv->menu, GTK_WIDGET(viewer), NULL);
-    }
-}
-
-static void
-rstto_picture_viewer_set_zoom_mode(RsttoPictureViewer *viewer, RsttoZoomMode mode)
-{
-    gdouble scale;
-    gboolean *p_fit_to_screen;
-    viewer->priv->zoom_mode = mode;
-
-    switch (viewer->priv->zoom_mode)
-    {
-        case RSTTO_ZOOM_MODE_CUSTOM:
-            if (viewer->priv->image)
-            {
-                p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
-                *p_fit_to_screen = FALSE;
-                g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen", p_fit_to_screen);
-            }
-            break;
-        case RSTTO_ZOOM_MODE_FIT:
-            if (viewer->priv->image)
-            {
-                p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
-                *p_fit_to_screen = TRUE;
-                g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen", p_fit_to_screen);
-            }
-            scale = rstto_picture_viewer_calculate_scale (viewer);
-            rstto_picture_viewer_set_scale (viewer, scale);
-            break;
-        case RSTTO_ZOOM_MODE_100:
-            if (viewer->priv->image)
-            {
-                p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
-                *p_fit_to_screen = FALSE;
-                g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen", p_fit_to_screen);
-            }
-            rstto_picture_viewer_set_scale (viewer, 1);
-            break;
-    }
-}
-
-/**
- *  rstto_picture_viewer_set_image:
- *  @viewer :
- *  @image  :
- *
- *
- */
-static void
-rstto_picture_viewer_set_image (RsttoPictureViewer *viewer, RsttoImage *image)
-{
-    gdouble *scale = NULL;
-    gboolean *fit_to_screen = NULL;
-
-    GValue max_size = {0,};
-
-    g_value_init (&max_size, G_TYPE_UINT);
-    g_object_get_property (G_OBJECT(viewer->priv->settings), "image-quality", &max_size);
-
-    if (viewer->priv->image)
-    {
-        g_signal_handlers_disconnect_by_func (viewer->priv->image, cb_rstto_picture_viewer_image_updated, viewer);
-        g_signal_handlers_disconnect_by_func (viewer->priv->image, cb_rstto_picture_viewer_image_prepared, viewer);
-        g_object_remove_weak_pointer (G_OBJECT (viewer->priv->image), (gpointer *)&viewer->priv->image);
-    }
-
-    viewer->priv->image = image;
-
-    if (viewer->priv->image)
-    {
-        g_object_add_weak_pointer (G_OBJECT (viewer->priv->image), (gpointer *)&viewer->priv->image);
-
-        g_signal_connect (G_OBJECT (viewer->priv->image), "updated", G_CALLBACK (cb_rstto_picture_viewer_image_updated), viewer);
-        g_signal_connect (G_OBJECT (viewer->priv->image), "prepared", G_CALLBACK (cb_rstto_picture_viewer_image_prepared), viewer);
-
-        scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
-        fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
-
-        if (scale == NULL)
-        {
-            scale = g_new0 (gdouble, 1);
-            *scale = -1.0;
-            g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-scale", scale);
-        }
-        if (fit_to_screen == NULL)
-        {
-            fit_to_screen = g_new0 (gboolean, 1);
-            g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen", fit_to_screen);
-        }
-
-        rstto_image_load (viewer->priv->image, FALSE, *scale, FALSE, NULL);
-
-        g_idle_add_full(G_PRIORITY_LOW, (GSourceFunc) rstto_main_window_add_file_to_recent_files, rstto_image_get_file(viewer->priv->image), NULL);
-    }
-    else
-    {
-        rstto_picture_viewer_queued_repaint (viewer, TRUE);
-        viewer->hadjustment->upper = 0;
-        viewer->hadjustment->lower = 0;
-        viewer->hadjustment->value = 0;
-        viewer->vadjustment->upper = 0;
-        viewer->vadjustment->lower = 0;
-        viewer->vadjustment->value = 0;
-
-        gtk_adjustment_changed(viewer->hadjustment);
-        gtk_adjustment_changed(viewer->vadjustment);
-
-        gtk_adjustment_value_changed(viewer->hadjustment);
-        gtk_adjustment_value_changed(viewer->vadjustment);
-    }
-}
-
-/**
- * cb_rstto_picture_viewer_image_updated:
- * @image:
- * @viewer:
- *
- */
-static void
-cb_rstto_picture_viewer_image_updated (RsttoImage *image, RsttoPictureViewer *viewer)
-{
-    rstto_picture_viewer_set_state (viewer, RSTTO_PICTURE_VIEWER_STATE_NORMAL);
-
-    rstto_picture_viewer_queued_repaint (viewer, TRUE);
-}
-
-/**
- * cb_rstto_picture_viewer_image_prepared:
- * @image:
- * @viewer:
- *
- */
-static void
-cb_rstto_picture_viewer_image_prepared (RsttoImage *image, RsttoPictureViewer *viewer)
-{
-    rstto_picture_viewer_set_state (viewer, RSTTO_PICTURE_VIEWER_STATE_PREVIEW);
-
-    rstto_picture_viewer_queued_repaint (viewer, TRUE);
-}
-
-/**
- * rstto_picture_viewer_zoom_fit:
- * @window:
- *
- * Adjust the scale to make the image fit the window
- */
-void
-rstto_picture_viewer_zoom_fit (RsttoPictureViewer *viewer)
-{
-    rstto_picture_viewer_set_zoom_mode (viewer, RSTTO_ZOOM_MODE_FIT);
-}
-
-/**
- * rstto_picture_viewer_zoom_100:
- * @viewer:
- *
- * Set the scale to 1, meaning a zoom-factor of 100%
- */
-void
-rstto_picture_viewer_zoom_100 (RsttoPictureViewer *viewer)
-{
-    rstto_picture_viewer_set_zoom_mode (viewer, RSTTO_ZOOM_MODE_100);
-}
-
-/**
- * rstto_picture_viewer_zoom_in:
- * @viewer:
- * @factor:
- *
- * Zoom in the scale with a certain factor
- */
-void
-rstto_picture_viewer_zoom_in (RsttoPictureViewer *viewer, gdouble factor)
-{
-    gdouble scale;
-
-    rstto_picture_viewer_set_zoom_mode (viewer, RSTTO_ZOOM_MODE_CUSTOM);
-    scale = rstto_picture_viewer_get_scale (viewer);
-    rstto_picture_viewer_set_scale (viewer, scale * factor);
-}
-
-/**
- * rstto_picture_viewer_zoom_out:
- * @viewer:
- * @factor:
- *
- * Zoom out the scale with a certain factor
- */
-void
-rstto_picture_viewer_zoom_out (RsttoPictureViewer *viewer, gdouble factor)
-{
-    gdouble scale;
-
-    rstto_picture_viewer_set_zoom_mode (viewer, RSTTO_ZOOM_MODE_CUSTOM);
-    scale = rstto_picture_viewer_get_scale (viewer);
-    rstto_picture_viewer_set_scale (viewer, scale / factor);
-}
-
-
-/******************************************************************************************/
-
-
-void
-rstto_picture_viewer_set_iter (RsttoPictureViewer *viewer, RsttoImageListIter *iter)
-{
-    if (viewer->priv->iter)
-    {
-        g_signal_handlers_disconnect_by_func (viewer->priv->iter, cb_rstto_picture_viewer_nav_iter_changed, viewer);
-        g_object_unref (viewer->priv->iter);
-        viewer->priv->iter = NULL;
-    }
-    if (iter)
-    {
-        viewer->priv->iter = iter;
-        g_object_ref (viewer->priv->iter);
-        g_signal_connect (G_OBJECT (viewer->priv->iter), "changed", G_CALLBACK (cb_rstto_picture_viewer_nav_iter_changed), viewer);
-    }
-}
-
-static void
-cb_rstto_picture_viewer_nav_iter_changed (RsttoImageListIter *iter, gpointer user_data)
-{
-    RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER (user_data);
-    rstto_picture_viewer_set_image (viewer, rstto_image_list_iter_get_image (iter));
-}
-
-static void
-cb_rstto_picture_viewer_bgcolor_changed (GObject *settings, GParamSpec *pspec, gpointer user_data)
-{
-    RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER (user_data);
-    rstto_picture_viewer_queued_repaint (viewer, TRUE);
-}
diff --git a/src/picture_viewer.h b/src/picture_viewer.h
deleted file mode 100644
index dab269c..0000000
--- a/src/picture_viewer.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- *  Copyright (c) Stephan Arts 2006-2010 <stephan at xfce.org>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  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.
- */
-
-#ifndef __RISTRETTO_PICTURE_VIEWER_H__
-#define __RISTRETTO_PICTURE_VIEWER_H__
-
-G_BEGIN_DECLS
-
-#define RSTTO_TYPE_PICTURE_VIEWER rstto_picture_viewer_get_type()
-
-#define RSTTO_PICTURE_VIEWER(obj)( \
-        G_TYPE_CHECK_INSTANCE_CAST ((obj), \
-                RSTTO_TYPE_PICTURE_VIEWER, \
-                RsttoPictureViewer))
-
-#define RSTTO_IS_PICTURE_VIEWER(obj)( \
-        G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
-                RSTTO_TYPE_PICTURE_VIEWER))
-
-#define RSTTO_PICTURE_VIEWER_CLASS(klass)( \
-        G_TYPE_CHECK_CLASS_CAST ((klass), \
-                RSTTO_TYPE_PICTURE_VIEWER, \
-                RsttoPictureViewerClass))
-
-#define RSTTO_IS_PICTURE_VIEWER_CLASS(klass)( \
-        G_TYPE_CHECK_CLASS_TYPE ((klass), \
-                RSTTO_TYPE_PICTURE_VIEWER()))
-
-typedef struct _RsttoPictureViewerPriv RsttoPictureViewerPriv;
-
-typedef struct _RsttoPictureViewer RsttoPictureViewer;
-
-struct _RsttoPictureViewer
-{
-    GtkWidget         parent;
-    RsttoPictureViewerPriv *priv;
-
-    GtkAdjustment    *vadjustment;
-    GtkAdjustment    *hadjustment;
-};
-
-typedef struct _RsttoPictureViewerClass RsttoPictureViewerClass;
-
-struct _RsttoPictureViewerClass
-{
-    GtkWidgetClass  parent_class;
-
-    gboolean (* set_scroll_adjustments) (RsttoPictureViewer *viewer,
-          GtkAdjustment     *hadjustment,
-          GtkAdjustment     *vadjustment);
-};
-
-GType      rstto_picture_viewer_get_type();
-
-GtkWidget *rstto_picture_viewer_new ();
-void       rstto_picture_viewer_set_iter (RsttoPictureViewer *, RsttoImageListIter *);
-gdouble    rstto_picture_viewer_get_scale(RsttoPictureViewer *viewer);
-void       rstto_picture_viewer_set_scale (RsttoPictureViewer *,gdouble);
-
-void       rstto_picture_viewer_zoom_fit (RsttoPictureViewer *viewer);
-void       rstto_picture_viewer_zoom_100 (RsttoPictureViewer *viewer);
-void       rstto_picture_viewer_zoom_in  (RsttoPictureViewer *viewer, gdouble factor);
-void       rstto_picture_viewer_zoom_out (RsttoPictureViewer *viewer, gdouble factor);
-
-void       rstto_picture_viewer_set_menu (RsttoPictureViewer *viewer, GtkMenu *menu);
-
-/**
-gdouble    rstto_picture_viewer_fit_scale(RsttoPictureViewer *viewer);
-
-void       rstto_picture_viewer_set_menu (RsttoPictureViewer *viewer, GtkMenu *menu);
-void       rstto_picture_viewer_set_bg_color (RsttoPictureViewer *viewer, const GdkColor *color);
-const GdkColor *
-rstto_picture_viewer_get_bg_color (RsttoPictureViewer *viewer);
-
-void       rstto_picture_viewer_redraw (RsttoPictureViewer *viewer);
-*/
-
-G_END_DECLS
-
-#endif /* __RISTRETTO_PICTURE_VIEWER_H__ */
diff --git a/src/xfce_wallpaper_manager.c b/src/xfce_wallpaper_manager.c
index 767bbdb..a1efb32 100644
--- a/src/xfce_wallpaper_manager.c
+++ b/src/xfce_wallpaper_manager.c
@@ -53,7 +53,7 @@ rstto_xfce_wallpaper_manager_finalize (GObject *object);
 
 static GObjectClass *parent_class = NULL;
 
-static RsttoXfceWallpaperManager *xfce_wallpaper_manager_object;
+static RsttoWallpaperManager *xfce_wallpaper_manager_object;
 
 struct _RsttoXfceWallpaperManagerPriv
 {
@@ -353,7 +353,7 @@ rstto_xfce_wallpaper_manager_finalize (GObject *object)
  *
  * Singleton
  */
-RsttoXfceWallpaperManager *
+RsttoWallpaperManager *
 rstto_xfce_wallpaper_manager_new (void)
 {
     if (xfce_wallpaper_manager_object == NULL)
diff --git a/src/xfce_wallpaper_manager.h b/src/xfce_wallpaper_manager.h
index 4c47359..b90fc85 100644
--- a/src/xfce_wallpaper_manager.h
+++ b/src/xfce_wallpaper_manager.h
@@ -59,7 +59,7 @@ struct _RsttoXfceWallpaperManagerClass
     GObjectClass parent_class;
 };
 
-RsttoXfceWallpaperManager *rstto_xfce_wallpaper_manager_new (void);
+RsttoWallpaperManager *rstto_xfce_wallpaper_manager_new (void);
 GType          rstto_xfce_wallpaper_manager_get_type (void);
 
 G_END_DECLS


More information about the Xfce4-commits mailing list