Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSybren A. Stüvel <sybren@blender.org>2021-10-25 17:25:38 +0300
committerSybren A. Stüvel <sybren@blender.org>2021-10-25 17:39:14 +0300
commit6da63b19fff2f690aa155bfd877cb8574d8c2987 (patch)
tree114ae73e5f8384416b8f8f11660f93cf185f44bf /source/blender/editors/space_file/filelist.c
parent1267dfee7c5453036a2affde90c4a094a4a824a4 (diff)
Fix T87627: Asset Browser Search Bar not working
The asset browser search bar was filtering on the filename containing the asset, and not the asset name. This is now fixed.
Diffstat (limited to 'source/blender/editors/space_file/filelist.c')
-rw-r--r--source/blender/editors/space_file/filelist.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index c3fff43d192..af26de1a3bd 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -920,14 +920,32 @@ static void prepare_filter_asset_library(const FileList *filelist, FileListFilte
static bool is_filtered_asset(FileListInternEntry *file, FileListFilter *filter)
{
+ const AssetMetaData *asset_data = filelist_file_internal_get_asset_data(file);
+
/* Not used yet for the asset view template. */
- if (!filter->asset_catalog_filter) {
+ if (filter->asset_catalog_filter && !file_is_asset_visible_in_catalog_filter_settings(
+ filter->asset_catalog_filter, asset_data)) {
+ return false;
+ }
+
+ if (filter->filter_search[0] == '\0') {
+ /* If there is no filter text, everything matches. */
return true;
}
- const AssetMetaData *asset_data = filelist_file_internal_get_asset_data(file);
- return file_is_asset_visible_in_catalog_filter_settings(filter->asset_catalog_filter,
- asset_data);
+ /* filter->filter_search contains "*the search text*"; this code strips the asterisks.
+ * For a simple name search it would work to call fnmatch() here, but that
+ * would be inefficient when expanding to searching for tags as well.*/
+ char filter_search[64]; /* sizeof(filter->filter_search) - 1 */
+ const size_t string_length = STRNCPY_RLEN(filter_search, filter->filter_search + 1);
+ filter_search[string_length - 1] = '\0';
+
+ if (BLI_strcasestr(file->name, filter_search) != NULL) {
+ return true;
+ }
+
+ /* TODO: search for matching tag. */
+ return false;
}
static bool is_filtered_lib_type(FileListInternEntry *file,
@@ -953,7 +971,7 @@ static bool is_filtered_asset_library(FileListInternEntry *file,
const char *root,
FileListFilter *filter)
{
- return is_filtered_lib(file, root, filter) && is_filtered_asset(file, filter);
+ return is_filtered_lib_type(file, root, filter) && is_filtered_asset(file, filter);
}
static bool is_filtered_main(FileListInternEntry *file,
@@ -969,7 +987,7 @@ static bool is_filtered_main_assets(FileListInternEntry *file,
{
/* "Filtered" means *not* being filtered out... So return true if the file should be visible. */
return is_filtered_id_file_type(file, file->relpath, file->name, filter) &&
- is_filtered_file_relpath(file, filter) && is_filtered_asset(file, filter);
+ is_filtered_asset(file, filter);
}
void filelist_tag_needs_filtering(FileList *filelist)