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:
authorPhilipp Oeser <info@graphics-engineer.com>2020-07-07 11:08:42 +0300
committerPhilipp Oeser <info@graphics-engineer.com>2020-09-04 11:11:45 +0300
commit2a24b3aaf4c846a5d98f783fef69946584865df9 (patch)
tree34b33b8512d0bc821f5ada704c37a868046869f1 /source/blender/editors/interface/interface.c
parent92b8d7019b4b484dc3120b26a27a59a3c7dc5489 (diff)
Fix T78084: Search does not accept text fragments everywhere
This was reported for the "Add Node" search functionality, but is relevant in other searches as well. So e.g. when searching for "Separate XYZ", typing "sep", then " " (with the intention to type "X" next) would clear the search field. Now use the same method (matching against all search words) as in F3 searching ('menu_search_update_fn') in other searches as well [searching IDs, property objects, finding nodes,...] This should give a much nicer search experience in general. Note: this does not touch other searches in the Dopesheet, Outliner, Filebrowser or User Preferences that have other search implementations. Maniphest Tasks: T78084 Differential Revision: https://developer.blender.org/D8232
Diffstat (limited to 'source/blender/editors/interface/interface.c')
-rw-r--r--source/blender/editors/interface/interface.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index bfa3f3a011c..d8330d62907 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -36,6 +36,7 @@
#include "DNA_userdef_types.h"
#include "DNA_workspace_types.h"
+#include "BLI_alloca.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_rect.h"
@@ -6613,12 +6614,18 @@ static void operator_enum_search_update_fn(const struct bContext *C,
const EnumPropertyItem *item, *item_array;
bool do_free;
+ /* Prepare BLI_string_all_words_matched. */
+ const size_t str_len = strlen(str);
+ const int words_max = BLI_string_max_possible_word_count(str_len);
+ int(*words)[2] = BLI_array_alloca(words, words_max);
+ const int words_len = BLI_string_find_split_words(str, str_len, ' ', words, words_max);
+
RNA_property_enum_items_gettexted((bContext *)C, ptr, prop, &item_array, NULL, &do_free);
for (item = item_array; item->identifier; item++) {
/* note: need to give the index rather than the
* identifier because the enum can be freed */
- if (BLI_strcasestr(item->name, str)) {
+ if (BLI_string_all_words_matched(item->name, str, words, words_len)) {
if (!UI_search_item_add(
items, item->name, POINTER_FROM_INT(item->value), item->icon, 0, 0)) {
break;