summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-file.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-private/nautilus-file.c')
-rw-r--r--libnautilus-private/nautilus-file.c39
1 files changed, 25 insertions, 14 deletions
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index 80137beb9..466023ef5 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -804,6 +804,10 @@ finalize (GObject *object)
if (file->details->thumbnail) {
g_object_unref (file->details->thumbnail);
}
+ if (file->details->scaled_thumbnail) {
+ g_object_unref (file->details->scaled_thumbnail);
+ }
+
if (file->details->mount) {
g_signal_handlers_disconnect_by_func (file->details->mount, file_mount_unmounted, file);
g_object_unref (file->details->mount);
@@ -4297,17 +4301,26 @@ nautilus_file_get_icon (NautilusFile *file,
thumb_scale = (double) NAUTILUS_ICON_SIZE_SMALLEST / s;
}
- scaled_pixbuf = gdk_pixbuf_scale_simple (raw_pixbuf,
- MAX (w * thumb_scale, 1),
- MAX (h * thumb_scale, 1),
- GDK_INTERP_BILINEAR);
-
- /* We don't want frames around small icons */
- if (!gdk_pixbuf_get_has_alpha (raw_pixbuf) || s >= 128 * scale) {
- if (nautilus_is_video_file (file))
- nautilus_ui_frame_video (&scaled_pixbuf);
- else
- nautilus_ui_frame_image (&scaled_pixbuf);
+ if (file->details->thumbnail_scale == thumb_scale &&
+ file->details->scaled_thumbnail != NULL) {
+ scaled_pixbuf = file->details->scaled_thumbnail;
+ } else {
+ scaled_pixbuf = gdk_pixbuf_scale_simple (raw_pixbuf,
+ MAX (w * thumb_scale, 1),
+ MAX (h * thumb_scale, 1),
+ GDK_INTERP_BILINEAR);
+
+ /* We don't want frames around small icons */
+ if (!gdk_pixbuf_get_has_alpha (raw_pixbuf) || s >= 128 * scale) {
+ if (nautilus_is_video_file (file))
+ nautilus_ui_frame_video (&scaled_pixbuf);
+ else
+ nautilus_ui_frame_image (&scaled_pixbuf);
+ }
+
+ g_clear_object (&file->details->scaled_thumbnail);
+ file->details->scaled_thumbnail = scaled_pixbuf;
+ file->details->thumbnail_scale = thumb_scale;
}
g_object_unref (raw_pixbuf);
@@ -4327,9 +4340,7 @@ nautilus_file_get_icon (NautilusFile *file,
DEBUG ("Returning thumbnailed image, at size %d %d",
(int) (w * thumb_scale), (int) (h * thumb_scale));
- icon = nautilus_icon_info_new_for_pixbuf (scaled_pixbuf, scale);
- g_object_unref (scaled_pixbuf);
- return icon;
+ return nautilus_icon_info_new_for_pixbuf (scaled_pixbuf, scale);
} else if (file->details->thumbnail_path == NULL &&
file->details->can_read &&
!file->details->is_thumbnailing &&