*** xfdesktop/settings/main.c Fri Jul 2 15:42:47 2010 --- xfdesktop-mine/settings/main.c Fri Jul 2 15:37:24 2010 *************** *** 26,32 **** #endif #include ! #ifdef HAVE_STDLIB_H #include #endif --- 26,32 ---- #endif #include ! #include #ifdef HAVE_STDLIB_H #include #endif *************** *** 133,138 **** --- 133,153 ---- TARGET_TEXT_URI_LIST = 0, }; + static char *replace_str(char *str, char *orig, char *rep) + { + static char buffer[4096]; + char *p; + + if(!(p = strstr(str, orig))) // Is 'orig' even in 'str'? + return str; + + strncpy(buffer, str, p-str); // Copy characters from 'str' start to 'orig' st$ + buffer[p-str] = '\0'; + + sprintf(buffer+(p-str), "%s%s", rep, p+strlen(orig)); + + return buffer; + } /* assumes gdk lock is held on function enter, and should be held * on function exit */ *************** *** 140,146 **** xfdesktop_settings_do_single_preview(GtkTreeModel *model, GtkTreeIter *iter) { ! gchar *name = NULL, *new_name = NULL, *filename = NULL; GdkPixbuf *pix, *pix_scaled = NULL; gtk_tree_model_get(model, iter, --- 155,161 ---- xfdesktop_settings_do_single_preview(GtkTreeModel *model, GtkTreeIter *iter) { ! gchar *name = NULL, *new_name = NULL, *filename = NULL, *cachefile = NULL; GdkPixbuf *pix, *pix_scaled = NULL; gtk_tree_model_get(model, iter, *************** *** 149,154 **** --- 164,177 ---- -1); gdk_threads_leave(); + cachefile = replace_str(name,"",""); + cachefile = replace_str(cachefile,"",""); + cachefile = g_strdup_printf(_("%sthumb-%s"),xfce_resource_lookup(XFCE_RESOURCE_CACHE, "xfce4/"),cachefile); + + if( access( cachefile, W_OK ) != -1 ) { + g_free(filename); + pix_scaled = gdk_pixbuf_new_from_file(cachefile,NULL); + } else { pix = gdk_pixbuf_new_from_file(filename, NULL); g_free(filename); *************** *** 167,176 **** --- 190,203 ---- height = PREVIEW_HEIGHT; pix_scaled = gdk_pixbuf_scale_simple(pix, width, height, GDK_INTERP_BILINEAR); + /* save thumb on hd */ + gdk_pixbuf_save(pix_scaled, cachefile, "jpeg", NULL, "quality", "75", NULL); g_object_unref(G_OBJECT(pix)); } + } g_free(name); + g_free(cachefile); gdk_threads_enter();