summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--libnautilus-private/nautilus-icon-factory.c59
2 files changed, 65 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 969d8e9a4..1433d346d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2002-12-09 James Willcox <jwillcox@gnome.org>
+
+ * libnautilus-private/nautilus-icon-factory.c:
+ (destroy_icon_factory), (get_icon_factory),
+ (show_thumbnails_changed_callback), (should_show_thumbnail),
+ (nautilus_icon_factory_get_icon_for_file):
+
+ Respond properly to prefs regarding when to show thumbnails.
+ Fixes #96644.
+
2002-12-09 Alexander Larsson <alexl@redhat.com>
* libnautilus-private/nautilus-file.c (nautilus_self_check_file):
diff --git a/libnautilus-private/nautilus-icon-factory.c b/libnautilus-private/nautilus-icon-factory.c
index d00480301..69f462ef2 100644
--- a/libnautilus-private/nautilus-icon-factory.c
+++ b/libnautilus-private/nautilus-icon-factory.c
@@ -164,6 +164,7 @@ static guint signals[LAST_SIGNAL];
static int cached_thumbnail_limit;
+static int show_image_thumbs;
/* forward declarations */
@@ -172,6 +173,7 @@ static void nautilus_icon_factory_class_init (NautilusIconFactoryCla
static void nautilus_icon_factory_instance_init (NautilusIconFactory *factory);
static void nautilus_icon_factory_finalize (GObject *object);
static void thumbnail_limit_changed_callback (gpointer user_data);
+static void show_thumbnails_changed_callback (gpointer user_data);
static void mime_type_data_changed_callback (GnomeVFSMIMEMonitor *monitor,
gpointer user_data);
static guint cache_key_hash (gconstpointer p);
@@ -202,6 +204,9 @@ destroy_icon_factory (void)
eel_preferences_remove_callback (NAUTILUS_PREFERENCES_IMAGE_FILE_THUMBNAIL_LIMIT,
thumbnail_limit_changed_callback,
NULL);
+ eel_preferences_remove_callback (NAUTILUS_PREFERENCES_SHOW_IMAGE_FILE_THUMBNAILS,
+ show_thumbnails_changed_callback,
+ NULL);
g_object_unref (global_icon_factory);
}
@@ -220,6 +225,11 @@ get_icon_factory (void)
thumbnail_limit_changed_callback,
NULL);
+ show_thumbnails_changed_callback (NULL);
+ eel_preferences_add_callback (NAUTILUS_PREFERENCES_SHOW_IMAGE_FILE_THUMBNAILS,
+ show_thumbnails_changed_callback,
+ NULL);
+
g_signal_connect (gnome_vfs_mime_monitor_get (),
"data_changed",
G_CALLBACK (mime_type_data_changed_callback),
@@ -648,6 +658,16 @@ thumbnail_limit_changed_callback (gpointer user_data)
signals[ICONS_CHANGED], 0);
}
+static void
+show_thumbnails_changed_callback (gpointer user_data)
+{
+ show_image_thumbs = eel_preferences_get_enum (NAUTILUS_PREFERENCES_SHOW_IMAGE_FILE_THUMBNAILS);
+
+ nautilus_icon_factory_clear ();
+ g_signal_emit (global_icon_factory,
+ signals[ICONS_CHANGED], 0);
+}
+
static void
mime_type_data_changed_callback (GnomeVFSMIMEMonitor *monitor, gpointer user_data)
{
@@ -695,6 +715,26 @@ image_uri_to_name_or_uri (const char *image_uri)
return NULL;
}
+static gboolean
+should_show_thumbnail (NautilusFile *file)
+{
+ if (nautilus_file_get_size (file) >
+ (unsigned int)cached_thumbnail_limit) {
+ return FALSE;
+ }
+
+ if (show_image_thumbs == NAUTILUS_SPEED_TRADEOFF_ALWAYS) {
+ return TRUE;
+ } else if (show_image_thumbs == NAUTILUS_SPEED_TRADEOFF_NEVER) {
+ return FALSE;
+ } else {
+ /* only local files */
+ return nautilus_file_is_local (file);
+ }
+
+ return FALSE;
+}
+
/* key routine to get the icon for a file */
char *
nautilus_icon_factory_get_icon_for_file (NautilusFile *file)
@@ -703,6 +743,8 @@ nautilus_icon_factory_get_icon_for_file (NautilusFile *file)
NautilusIconFactory *factory;
GnomeIconLookupResultFlags lookup_result;
GnomeVFSFileInfo *file_info;
+ GnomeThumbnailFactory *thumb_factory;
+ gboolean show_thumb;
if (file == NULL) {
return NULL;
@@ -731,9 +773,17 @@ nautilus_icon_factory_get_icon_for_file (NautilusFile *file)
mime_type = nautilus_file_get_mime_type (file);
file_info = nautilus_file_peek_vfs_file_info (file);
-
+
+ show_thumb = should_show_thumbnail (file);
+
+ if (show_thumb) {
+ thumb_factory = factory->thumbnail_factory;
+ } else {
+ thumb_factory = NULL;
+ }
+
icon_name = gnome_icon_lookup (factory->icon_theme,
- factory->thumbnail_factory,
+ thumb_factory,
file_uri,
custom_icon,
nautilus_file_peek_vfs_file_info (file),
@@ -745,7 +795,8 @@ nautilus_icon_factory_get_icon_for_file (NautilusFile *file)
/* Create thumbnails if we can, and if the looked up icon isn't a thumbnail
or an absolute pathname (custom icon or image as itself) */
- if (!(lookup_result & GNOME_ICON_LOOKUP_RESULT_FLAGS_THUMBNAIL) &&
+ if (show_thumb &&
+ !(lookup_result & GNOME_ICON_LOOKUP_RESULT_FLAGS_THUMBNAIL) &&
icon_name[0] != '/' && file_info &&
gnome_thumbnail_factory_can_thumbnail (factory->thumbnail_factory,
file_uri,
@@ -993,7 +1044,7 @@ load_pixbuf_svg (const char *path,
if (pixbuf == NULL) {
return NULL;
}
-
+
if (icon_data != NULL) {
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);