gboolean vfs_file_info_load_thumbnail( VFSFileInfo* fi, const char* full_path, gboolean big ) { GdkPixbuf* thumbnail; if ( big ) { if ( fi->big_thumbnail ) return TRUE; } else { if ( fi->small_thumbnail ) return TRUE; } thumbnail = vfs_thumbnail_load_for_file( full_path, big ? big_thumb_size : small_thumb_size , fi->mtime ); if( G_LIKELY( thumbnail ) ) { if ( big ) fi->big_thumbnail = thumbnail; else fi->small_thumbnail = thumbnail; } else /* fallback to mime_type icon */ { if ( big ) fi->big_thumbnail = vfs_file_info_get_big_icon( fi ); else fi->small_thumbnail = vfs_file_info_get_small_icon( fi ); } return ( thumbnail != NULL ); }
void ptk_file_list_get_value ( GtkTreeModel *tree_model, GtkTreeIter *iter, gint column, GValue *value ) { GList* l; PtkFileList* list = PTK_FILE_LIST(tree_model); VFSFileInfo* info; GdkPixbuf* icon; g_return_if_fail (PTK_IS_FILE_LIST (tree_model)); g_return_if_fail (iter != NULL); g_return_if_fail (column < G_N_ELEMENTS(column_types) ); g_value_init (value, column_types[column] ); l = (GList*) iter->user_data; g_return_if_fail ( l != NULL ); info = (VFSFileInfo*)iter->user_data2; switch(column) { case COL_FILE_BIG_ICON: icon = NULL; /* special file can use special icons saved as thumbnails*/ if( list->max_thumbnail > vfs_file_info_get_size( info ) && info->flags == VFS_FILE_INFO_NONE ) icon = vfs_file_info_get_big_thumbnail( info ); if( ! icon ) icon = vfs_file_info_get_big_icon( info ); if( icon ) { g_value_set_object( value, icon ); g_object_unref( icon ); } break; case COL_FILE_SMALL_ICON: icon = NULL; /* special file can use special icons saved as thumbnails*/ if( list->max_thumbnail > vfs_file_info_get_size( info ) ) icon = vfs_file_info_get_small_thumbnail( info ); if( !icon ) icon = vfs_file_info_get_small_icon( info ); if( icon ) { g_value_set_object( value, icon ); g_object_unref( icon ); } break; case COL_FILE_NAME: g_value_set_string( value, vfs_file_info_get_disp_name(info) ); break; case COL_FILE_SIZE: if ( S_ISDIR( info->mode ) || ( S_ISLNK( info->mode ) && 0 == strcmp( vfs_mime_type_get_type( info->mime_type ), XDG_MIME_TYPE_DIRECTORY ) ) ) g_value_set_string( value, NULL ); else g_value_set_string( value, vfs_file_info_get_disp_size(info) ); break; case COL_FILE_DESC: g_value_set_string( value, vfs_file_info_get_mime_type_desc( info ) ); break; case COL_FILE_PERM: g_value_set_string( value, vfs_file_info_get_disp_perm(info) ); break; case COL_FILE_OWNER: g_value_set_string( value, vfs_file_info_get_disp_owner(info) ); break; case COL_FILE_MTIME: g_value_set_string( value, vfs_file_info_get_disp_mtime(info) ); break; case COL_FILE_INFO: g_value_set_pointer( value, vfs_file_info_ref( info ) ); break; } }