diff options
Diffstat (limited to 'source/blender/editors/interface/interface_utils.c')
-rw-r--r-- | source/blender/editors/interface/interface_utils.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index 79a90d27373..781c8f73b0a 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -399,6 +399,11 @@ void ui_rna_collection_search_cb(const struct bContext *C, int i = 0, iconid = 0, flag = RNA_property_flag(data->target_prop); ListBase *items_list = MEM_callocN(sizeof(ListBase), "items_list"); CollItemSearch *cis; + const bool is_ptr_target = (RNA_property_type(data->target_prop) == PROP_POINTER); + /* For non-pointer properties, UI code acts entirely based on the item's name. So the name has to + * match the RNA name exactly. So only for pointer properties, the name can be modified to add + * further UI hints. */ + const bool requires_exact_data_name = !is_ptr_target; const bool skip_filter = data->search_but && !data->search_but->changed; char name_buf[UI_MAX_DRAW_STR]; char *name; @@ -413,7 +418,7 @@ void ui_rna_collection_search_cb(const struct bContext *C, } /* use filter */ - if (RNA_property_type(data->target_prop) == PROP_POINTER) { + if (is_ptr_target) { if (RNA_property_pointer_poll(&data->target_ptr, data->target_prop, &itemptr) == 0) { continue; } @@ -423,10 +428,15 @@ void ui_rna_collection_search_cb(const struct bContext *C, if (itemptr.type && RNA_struct_is_ID(itemptr.type)) { iconid = ui_id_icon_get(C, itemptr.data, false); - BKE_id_full_name_ui_prefix_get(name_buf, itemptr.data); - BLI_STATIC_ASSERT(sizeof(name_buf) >= MAX_ID_FULL_NAME_UI, - "Name string buffer should be big enough to hold full UI ID name"); - name = name_buf; + if (requires_exact_data_name) { + name = RNA_struct_name_get_alloc(&itemptr, name_buf, sizeof(name_buf), NULL); + } + else { + BKE_id_full_name_ui_prefix_get(name_buf, itemptr.data); + BLI_STATIC_ASSERT(sizeof(name_buf) >= MAX_ID_FULL_NAME_UI, + "Name string buffer should be big enough to hold full UI ID name"); + name = name_buf; + } } else { name = RNA_struct_name_get_alloc(&itemptr, name_buf, sizeof(name_buf), NULL); |