void ptk_file_list_show_thumbnails( PtkFileList* list, gboolean is_big, int max_file_size ) { GList* l; VFSFileInfo* file; int old_max_thumbnail; old_max_thumbnail = list->max_thumbnail; list->max_thumbnail = max_file_size; list->big_thumbnail = is_big; /* FIXME: This is buggy!!! Further testing might be needed. */ if( 0 == max_file_size ) { if( old_max_thumbnail > 0 ) /* cancel thumbnails */ { vfs_thumbnail_loader_cancel_all_requests( list->dir, list->big_thumbnail ); g_signal_handlers_disconnect_by_func( list->dir, on_thumbnail_loaded, list ); for( l = list->files; l; l = l->next ) { file = (VFSFileInfo*)l->data; if( vfs_file_info_is_image( file ) && vfs_file_info_is_thumbnail_loaded( file, is_big ) ) { /* update the model */ ptk_file_list_file_changed( list->dir, file, list ); } } } return; } g_signal_connect( list->dir, "thumbnail-loaded", G_CALLBACK(on_thumbnail_loaded), list ); for( l = list->files; l; l = l->next ) { file = (VFSFileInfo*)l->data; if( vfs_file_info_is_image( file ) && vfs_file_info_get_size( file ) < list->max_thumbnail ) { if( vfs_file_info_is_thumbnail_loaded( file, is_big ) ) ptk_file_list_file_changed( list->dir, file, list ); else { vfs_thumbnail_loader_request( list->dir, file, is_big ); /* g_debug( "REQUEST: %s", file->name ); */ } } } }
static void _ptk_file_list_file_created( VFSDir* dir, VFSFileInfo* file, PtkFileList* list ) { ptk_file_list_file_created( dir, file, list ); /* check if reloading of thumbnail is needed. */ if( vfs_file_info_is_image( file ) && vfs_file_info_get_size( file ) < list->max_thumbnail ) { if( ! vfs_file_info_is_thumbnail_loaded( file, list->big_thumbnail ) ) vfs_thumbnail_loader_request( list->dir, file, list->big_thumbnail ); } }
static void _ptk_file_list_file_created( VFSDir* dir, VFSFileInfo* file, PtkFileList* list ) { ptk_file_list_file_created( dir, file, list ); /* check if reloading of thumbnail is needed. */ if ( list->max_thumbnail != 0 && ( #ifdef HAVE_FFMPEG vfs_file_info_is_video( file ) || #endif ( file->size /*vfs_file_info_get_size( file )*/ < list->max_thumbnail && vfs_file_info_is_image( file ) ) ) ) { if( ! vfs_file_info_is_thumbnail_loaded( file, list->big_thumbnail ) ) vfs_thumbnail_loader_request( list->dir, file, list->big_thumbnail ); } }
static void _ptk_file_list_file_changed( VFSDir* dir, VFSFileInfo* file, PtkFileList* list ) { if ( !file || !dir || dir->cancel ) return; ptk_file_list_file_changed( dir, file, list ); /* check if reloading of thumbnail is needed. * See also desktop-window.c:on_file_changed() */ if ( list->max_thumbnail != 0 && ( #ifdef HAVE_FFMPEG ( vfs_file_info_is_video( file ) && time( NULL ) - *vfs_file_info_get_mtime( file ) > 5 ) || #endif ( file->size /*vfs_file_info_get_size( file )*/ < list->max_thumbnail && vfs_file_info_is_image( file ) ) ) ) { if( ! vfs_file_info_is_thumbnail_loaded( file, list->big_thumbnail ) ) vfs_thumbnail_loader_request( list->dir, file, list->big_thumbnail ); } }
void ptk_file_list_show_thumbnails( PtkFileList* list, gboolean is_big, int max_file_size ) { GList* l; VFSFileInfo* file; int old_max_thumbnail; if ( !list ) return; old_max_thumbnail = list->max_thumbnail; list->max_thumbnail = max_file_size; list->big_thumbnail = is_big; /* FIXME: This is buggy!!! Further testing might be needed. */ if( 0 == max_file_size ) { if( old_max_thumbnail > 0 ) /* cancel thumbnails */ { vfs_thumbnail_loader_cancel_all_requests( list->dir, list->big_thumbnail ); g_signal_handlers_disconnect_by_func( list->dir, on_thumbnail_loaded, list ); for( l = list->files; l; l = l->next ) { file = (VFSFileInfo*)l->data; if ( ( vfs_file_info_is_image( file ) #ifdef HAVE_FFMPEG || vfs_file_info_is_video( file ) #endif ) && vfs_file_info_is_thumbnail_loaded( file, is_big ) ) { /* update the model */ ptk_file_list_file_changed( list->dir, file, list ); } } /* Thumbnails are being disabled so ensure the large thumbnails are * freed - with up to 256x256 images this is a lot of memory */ vfs_dir_unload_thumbnails(list->dir, is_big); } return; } g_signal_connect( list->dir, "thumbnail-loaded", G_CALLBACK(on_thumbnail_loaded), list ); for( l = list->files; l; l = l->next ) { file = (VFSFileInfo*)l->data; if ( list->max_thumbnail != 0 && ( #ifdef HAVE_FFMPEG vfs_file_info_is_video( file ) || #endif ( file->size /*vfs_file_info_get_size( file )*/ < list->max_thumbnail && vfs_file_info_is_image( file ) ) ) ) { if( vfs_file_info_is_thumbnail_loaded( file, is_big ) ) ptk_file_list_file_changed( list->dir, file, list ); else { vfs_thumbnail_loader_request( list->dir, file, is_big ); /* g_debug( "REQUEST: %s", file->name ); */ } } } }