void ptk_file_list_set_dir( PtkFileList* list, VFSDir* dir ) { GList* l; if( list->dir == dir ) return; if ( list->dir ) { if( list->max_thumbnail > 0 ) { /* cancel all possible pending requests */ vfs_thumbnail_loader_cancel_all_requests( list->dir, list->big_thumbnail ); } g_list_foreach( list->files, (GFunc)vfs_file_info_unref, NULL ); g_list_free( list->files ); g_signal_handlers_disconnect_by_func( list->dir, _ptk_file_list_file_created, list ); g_signal_handlers_disconnect_by_func( list->dir, ptk_file_list_file_deleted, list ); g_signal_handlers_disconnect_by_func( list->dir, _ptk_file_list_file_changed, list ); g_signal_handlers_disconnect_by_func( list->dir, on_thumbnail_loaded, list ); g_object_unref( list->dir ); } list->dir = dir; list->files = NULL; list->n_files = 0; if( ! dir ) return; g_object_ref( list->dir ); g_signal_connect( list->dir, "file-created", G_CALLBACK(_ptk_file_list_file_created), list ); g_signal_connect( list->dir, "file-deleted", G_CALLBACK(ptk_file_list_file_deleted), list ); g_signal_connect( list->dir, "file-changed", G_CALLBACK(_ptk_file_list_file_changed), list ); if( dir && dir->file_list ) { for( l = dir->file_list; l; l = l->next ) { if( list->show_hidden || ((VFSFileInfo*)l->data)->disp_name[0] != '.' ) { list->files = g_list_prepend( list->files, vfs_file_info_ref( (VFSFileInfo*)l->data) ); ++list->n_files; } } } }
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 ); */ } } } }
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 ); */ } } } }