From 4b7b2434b5ad0735f30a247176b70fb96e957f1a Mon Sep 17 00:00:00 2001 From: Eric Koegel Date: Tue, 6 Dec 2011 18:49:59 +0300 Subject: [PATCH] Displays thumbnails of images on the desktop. Sets up an xfconf property so it can be disabled. --- src/xfdesktop-regular-file-icon.c | 49 ++++++++++++++++++++++++++++++++++-- 1 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/xfdesktop-regular-file-icon.c b/src/xfdesktop-regular-file-icon.c index e14256a..d0f252d 100644 --- a/src/xfdesktop-regular-file-icon.c +++ b/src/xfdesktop-regular-file-icon.c @@ -47,6 +47,7 @@ #include #include +#include #ifdef HAVE_THUNARX #include @@ -57,6 +58,8 @@ #include "xfdesktop-regular-file-icon.h" #define EMBLEM_SYMLINK "emblem-symbolic-link" +#define XFCONF_DESKTOP_CHANNEL "xfce4-desktop" +#define XFCONF_THUMNAILS_PROPERTY "/desktop-icons/show-thumbnails" struct _XfdesktopRegularFileIconPrivate { @@ -248,6 +251,32 @@ xfdesktop_regular_file_icon_peek_pixbuf(XfdesktopIcon *icon, g_key_file_free(key_file); g_free(contents); } + } else { + gboolean show_thumbnails = TRUE; + gboolean have_xfconf = FALSE; + XfconfChannel *desktop_channel = NULL; + + have_xfconf = xfconf_init(NULL); + if(have_xfconf) + { + desktop_channel = xfconf_channel_get(XFCONF_DESKTOP_CHANNEL); + if(xfconf_channel_has_property(desktop_channel, XFCONF_THUMNAILS_PROPERTY)) + { + show_thumbnails = xfconf_channel_get_bool(desktop_channel, XFCONF_THUMNAILS_PROPERTY, FALSE); + } else { + xfconf_channel_set_bool(desktop_channel, XFCONF_THUMNAILS_PROPERTY, TRUE); + } + } + + if(show_thumbnails) + { + file_icon->priv->pix = gdk_pixbuf_new_from_file_at_scale(g_file_get_path(file_icon->priv->file), + size, size, + FALSE, NULL); + } + + if(have_xfconf) + xfconf_shutdown(); } /* release thumbnail path */ @@ -281,9 +310,23 @@ xfdesktop_regular_file_icon_peek_pixbuf(XfdesktopIcon *icon, if(file_icon->priv->file_info) gicon = g_file_info_get_icon(file_icon->priv->file_info); - file_icon->priv->pix = xfdesktop_file_utils_get_icon(icon_name, gicon, - size, emblem_pix, - file_icon->priv->pix_opacity); + if(file_icon->priv->pix) { + if(emblem_pix) { + gint emblem_pix_size = gdk_pixbuf_get_width(emblem_pix); + gint dest_size = size - emblem_pix_size; + + /* We have to add the emblem */ + gdk_pixbuf_composite(emblem_pix, file_icon->priv->pix, + dest_size, dest_size, + emblem_pix_size, emblem_pix_size, + dest_size, dest_size, + 1.0, 1.0, GDK_INTERP_BILINEAR, 255); + } + } else { + file_icon->priv->pix = xfdesktop_file_utils_get_icon(icon_name, gicon, + size, emblem_pix, + file_icon->priv->pix_opacity); + } file_icon->priv->cur_pix_size = size; -- 1.7.5.4