From 2e5138fed8e059cbc8a3e1aaaaeefb1cc67de169 Mon Sep 17 00:00:00 2001 From: Guillermo Venegas Date: Tue, 24 Jun 2025 20:47:54 +0200 Subject: [PATCH] Refactor: UI: Replace uiItemPointerR with uiLayout::prop_search This converts the public uiItemPointerR and uiItemPointerR_prop functions to an object-oriented API (uiLayout::prop_search overloads), matching the python API. Part of: #117604 Pull Request: https://projects.blender.org/blender/blender/pulls/140930 --- .../editors/include/UI_interface_layout.hh | 40 +++++++++++------- .../editors/interface/interface_layout.cc | 41 +++++++++---------- source/blender/editors/mesh/editmesh_tools.cc | 3 +- .../editors/space_graph/graph_buttons.cc | 13 +++--- source/blender/makesrna/intern/rna_ui_api.cc | 3 +- .../blender/modifiers/intern/MOD_displace.cc | 15 ++++--- .../blender/modifiers/intern/MOD_explode.cc | 4 +- .../intern/MOD_grease_pencil_build.cc | 9 +--- .../intern/MOD_grease_pencil_hook.cc | 3 +- .../intern/MOD_grease_pencil_util.cc | 32 +++++++-------- .../intern/MOD_grease_pencil_weight_angle.cc | 3 +- .../MOD_grease_pencil_weight_proximity.cc | 3 +- source/blender/modifiers/intern/MOD_hook.cc | 3 +- .../blender/modifiers/intern/MOD_lineart.cc | 15 +++---- .../modifiers/intern/MOD_meshsequencecache.cc | 4 +- .../modifiers/intern/MOD_particleinstance.cc | 21 +++++----- .../blender/modifiers/intern/MOD_solidify.cc | 17 ++++---- .../blender/modifiers/intern/MOD_ui_common.cc | 2 +- .../blender/modifiers/intern/MOD_uvproject.cc | 3 +- source/blender/modifiers/intern/MOD_uvwarp.cc | 8 ++-- source/blender/modifiers/intern/MOD_warp.cc | 21 +++++----- source/blender/modifiers/intern/MOD_wave.cc | 15 ++++--- .../modifiers/intern/MOD_weightvg_util.cc | 4 +- .../modifiers/intern/MOD_weightvgedit.cc | 3 +- .../modifiers/intern/MOD_weightvgproximity.cc | 4 +- .../nodes/node_composite_keyingscreen.cc | 2 +- .../nodes/node_composite_planetrackdeform.cc | 5 +-- .../nodes/node_composite_trackpos.cc | 4 +- .../nodes/intern/geometry_nodes_caller_ui.cc | 29 +++++++------ .../shader/nodes/node_shader_normal_map.cc | 2 +- .../nodes/shader/nodes/node_shader_tangent.cc | 2 +- .../nodes/shader/nodes/node_shader_uvmap.cc | 2 +- .../shader/nodes/node_shader_vertex_color.cc | 2 +- 33 files changed, 156 insertions(+), 181 deletions(-) diff --git a/source/blender/editors/include/UI_interface_layout.hh b/source/blender/editors/include/UI_interface_layout.hh index 627d4452e06..2cce39deacd 100644 --- a/source/blender/editors/include/UI_interface_layout.hh +++ b/source/blender/editors/include/UI_interface_layout.hh @@ -444,6 +444,31 @@ struct uiLayout : uiItem { std::optional name, int icon); + /** + * Adds a RNA enum/pointer/string/ property item, and exposes it into the layout. Button input + * would suggest values from the search property collection. + * \param searchprop: Collection property in \a searchptr from where to take input values. + * \param results_are_suggestions: Allow inputs that not match any suggested value. + */ + void prop_search(PointerRNA *ptr, + PropertyRNA *prop, + PointerRNA *searchptr, + PropertyRNA *searchprop, + std::optional name, + int icon, + bool results_are_suggestions); + /** + * Adds a RNA enum/pointer/string/ property item, and exposes it into the layout. Button input + * would suggest values from the search property collection, input must match a suggested value. + * \param searchprop: Collection property in \a searchptr from where to take input values. + */ + void prop_search(PointerRNA *ptr, + blender::StringRefNull propname, + PointerRNA *searchptr, + blender::StringRefNull searchpropname, + std::optional name, + int icon); + /** Adds a separator item, that adds empty space between items. */ void separator(float factor = 1.0f, LayoutSeparatorType type = LayoutSeparatorType::Auto); }; @@ -763,21 +788,6 @@ void uiItemEnumR_string(uiLayout *layout, std::optional name, int icon); void uiItemsEnumR(uiLayout *layout, PointerRNA *ptr, blender::StringRefNull propname); -void uiItemPointerR_prop(uiLayout *layout, - PointerRNA *ptr, - PropertyRNA *prop, - PointerRNA *searchptr, - PropertyRNA *searchprop, - std::optional name, - int icon, - bool results_are_suggestions); -void uiItemPointerR(uiLayout *layout, - PointerRNA *ptr, - blender::StringRefNull propname, - PointerRNA *searchptr, - blender::StringRefNull searchpropname, - std::optional name, - int icon); /** * Create a list of enum items. diff --git a/source/blender/editors/interface/interface_layout.cc b/source/blender/editors/interface/interface_layout.cc index 3197e66dd37..f67f7380009 100644 --- a/source/blender/editors/interface/interface_layout.cc +++ b/source/blender/editors/interface/interface_layout.cc @@ -2730,18 +2730,17 @@ uiBut *ui_but_add_search(uiBut *but, return but; } -void uiItemPointerR_prop(uiLayout *layout, - PointerRNA *ptr, - PropertyRNA *prop, - PointerRNA *searchptr, - PropertyRNA *searchprop, - const std::optional name_opt, - int icon, - bool results_are_suggestions) +void uiLayout::prop_search(PointerRNA *ptr, + PropertyRNA *prop, + PointerRNA *searchptr, + PropertyRNA *searchprop, + const std::optional name_opt, + int icon, + bool results_are_suggestions) { - const bool use_prop_sep = bool(layout->flag_ & uiItemInternalFlag::PropSep); - - ui_block_new_button_group(layout->block(), uiButtonGroupFlag(0)); + const bool use_prop_sep = bool(flag_ & uiItemInternalFlag::PropSep); + uiBlock *block = this->block(); + ui_block_new_button_group(block, uiButtonGroupFlag(0)); const PropertyType type = RNA_property_type(prop); if (!ELEM(type, PROP_POINTER, PROP_STRING, PROP_ENUM)) { @@ -2777,23 +2776,21 @@ void uiItemPointerR_prop(uiLayout *layout, } /* create button */ - uiBlock *block = layout->block(); int w, h; - ui_item_rna_size(layout, name, icon, ptr, prop, 0, false, false, &w, &h); + ui_item_rna_size(this, name, icon, ptr, prop, 0, false, false, &w, &h); w += UI_UNIT_X; /* X icon needs more space */ - uiBut *but = ui_item_with_label(layout, block, name, icon, ptr, prop, 0, 0, 0, w, h, 0); + uiBut *but = ui_item_with_label(this, block, name, icon, ptr, prop, 0, 0, 0, w, h, 0); but = ui_but_add_search(but, ptr, prop, searchptr, searchprop, results_are_suggestions); } -void uiItemPointerR(uiLayout *layout, - PointerRNA *ptr, - const StringRefNull propname, - PointerRNA *searchptr, - const StringRefNull searchpropname, - const std::optional name, - int icon) +void uiLayout::prop_search(PointerRNA *ptr, + const StringRefNull propname, + PointerRNA *searchptr, + const StringRefNull searchpropname, + const std::optional name, + int icon) { /* validate arguments */ PropertyRNA *prop = RNA_struct_find_property(ptr, propname.c_str()); @@ -2809,7 +2806,7 @@ void uiItemPointerR(uiLayout *layout, return; } - uiItemPointerR_prop(layout, ptr, prop, searchptr, searchprop, name, icon, false); + this->prop_search(ptr, prop, searchptr, searchprop, name, icon, false); } void ui_item_menutype_func(bContext *C, uiLayout *layout, void *arg_mt) diff --git a/source/blender/editors/mesh/editmesh_tools.cc b/source/blender/editors/mesh/editmesh_tools.cc index c202f5f797a..064e59bd29e 100644 --- a/source/blender/editors/mesh/editmesh_tools.cc +++ b/source/blender/editors/mesh/editmesh_tools.cc @@ -3934,8 +3934,7 @@ static void edbm_blend_from_shape_ui(bContext *C, wmOperator *op) layout->use_property_split_set(true); layout->use_property_decorate_set(false); - uiItemPointerR( - layout, op->ptr, "shape", &ptr_key, "key_blocks", std::nullopt, ICON_SHAPEKEY_DATA); + layout->prop_search(op->ptr, "shape", &ptr_key, "key_blocks", std::nullopt, ICON_SHAPEKEY_DATA); layout->prop(op->ptr, "blend", UI_ITEM_NONE, std::nullopt, ICON_NONE); layout->prop(op->ptr, "add", UI_ITEM_NONE, std::nullopt, ICON_NONE); } diff --git a/source/blender/editors/space_graph/graph_buttons.cc b/source/blender/editors/space_graph/graph_buttons.cc index 8e22650bc12..8dc2a91d3fe 100644 --- a/source/blender/editors/space_graph/graph_buttons.cc +++ b/source/blender/editors/space_graph/graph_buttons.cc @@ -794,7 +794,7 @@ static void graph_panel_driverVar__rotDiff(uiLayout *layout, ID *id, DriverVar * if (dtar->id && GS(dtar->id->name) == ID_OB && ob1->pose) { PointerRNA tar_ptr = RNA_pointer_create_discrete(dtar->id, &RNA_Pose, ob1->pose); - uiItemPointerR(col, &dtar_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA); + col->prop_search(&dtar_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA); } /* Object 2 */ @@ -804,7 +804,7 @@ static void graph_panel_driverVar__rotDiff(uiLayout *layout, ID *id, DriverVar * if (dtar2->id && GS(dtar2->id->name) == ID_OB && ob2->pose) { PointerRNA tar_ptr = RNA_pointer_create_discrete(dtar2->id, &RNA_Pose, ob2->pose); - uiItemPointerR(col, &dtar2_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA); + col->prop_search(&dtar2_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA); } } @@ -828,8 +828,7 @@ static void graph_panel_driverVar__locDiff(uiLayout *layout, ID *id, DriverVar * if (dtar->id && GS(dtar->id->name) == ID_OB && ob1->pose) { PointerRNA tar_ptr = RNA_pointer_create_discrete(dtar->id, &RNA_Pose, ob1->pose); - uiItemPointerR( - col, &dtar_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA); + col->prop_search(&dtar_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA); } /* we can clear it again now - it's only needed when creating the ID/Bone fields */ @@ -844,8 +843,7 @@ static void graph_panel_driverVar__locDiff(uiLayout *layout, ID *id, DriverVar * if (dtar2->id && GS(dtar2->id->name) == ID_OB && ob2->pose) { PointerRNA tar_ptr = RNA_pointer_create_discrete(dtar2->id, &RNA_Pose, ob2->pose); - uiItemPointerR( - col, &dtar2_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA); + col->prop_search(&dtar2_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA); } /* we can clear it again now - it's only needed when creating the ID/Bone fields */ @@ -871,8 +869,7 @@ static void graph_panel_driverVar__transChan(uiLayout *layout, ID *id, DriverVar if (dtar->id && GS(dtar->id->name) == ID_OB && ob->pose) { PointerRNA tar_ptr = RNA_pointer_create_discrete(dtar->id, &RNA_Pose, ob->pose); - uiItemPointerR( - col, &dtar_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA); + col->prop_search(&dtar_ptr, "bone_target", &tar_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA); } sub = &layout->column(true); diff --git a/source/blender/makesrna/intern/rna_ui_api.cc b/source/blender/makesrna/intern/rna_ui_api.cc index 1e2a34c987f..1b96ed9ad78 100644 --- a/source/blender/makesrna/intern/rna_ui_api.cc +++ b/source/blender/makesrna/intern/rna_ui_api.cc @@ -336,8 +336,7 @@ static void rna_uiItemPointerR(uiLayout *layout, std::optional text = rna_translate_ui_text( name, text_ctxt, nullptr, prop, translate); - uiItemPointerR_prop( - layout, ptr, prop, searchptr, searchprop, text, icon, results_are_suggestions); + layout->prop_search(ptr, prop, searchptr, searchprop, text, icon, results_are_suggestions); } static PointerRNA rna_uiItemO(uiLayout *layout, diff --git a/source/blender/modifiers/intern/MOD_displace.cc b/source/blender/modifiers/intern/MOD_displace.cc index ee9ad54ad85..e6e26424be0 100644 --- a/source/blender/modifiers/intern/MOD_displace.cc +++ b/source/blender/modifiers/intern/MOD_displace.cc @@ -361,17 +361,16 @@ static void panel_draw(const bContext *C, Panel *panel) (RNA_enum_get(&texture_coords_obj_ptr, "type") == OB_ARMATURE)) { PointerRNA texture_coords_obj_data_ptr = RNA_pointer_get(&texture_coords_obj_ptr, "data"); - uiItemPointerR(col, - ptr, - "texture_coords_bone", - &texture_coords_obj_data_ptr, - "bones", - IFACE_("Bone"), - ICON_NONE); + col->prop_search(ptr, + "texture_coords_bone", + &texture_coords_obj_data_ptr, + "bones", + IFACE_("Bone"), + ICON_NONE); } } else if (texture_coords == MOD_DISP_MAP_UV && RNA_enum_get(&ob_ptr, "type") == OB_MESH) { - uiItemPointerR(col, ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); + col->prop_search(ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); } layout->separator(); diff --git a/source/blender/modifiers/intern/MOD_explode.cc b/source/blender/modifiers/intern/MOD_explode.cc index 045103a0d76..b5bce8ed301 100644 --- a/source/blender/modifiers/intern/MOD_explode.cc +++ b/source/blender/modifiers/intern/MOD_explode.cc @@ -1172,8 +1172,8 @@ static void panel_draw(const bContext * /*C*/, Panel *panel) layout->use_property_split_set(true); - uiItemPointerR( - layout, ptr, "particle_uv", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); + layout->prop_search( + ptr, "particle_uv", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); row = &layout->row(true, IFACE_("Show")); row->prop(ptr, "show_alive", toggles_flag, std::nullopt, ICON_NONE); diff --git a/source/blender/modifiers/intern/MOD_grease_pencil_build.cc b/source/blender/modifiers/intern/MOD_grease_pencil_build.cc index 108549d27e2..bf9ec9d5cb2 100644 --- a/source/blender/modifiers/intern/MOD_grease_pencil_build.cc +++ b/source/blender/modifiers/intern/MOD_grease_pencil_build.cc @@ -817,13 +817,8 @@ static void panel_draw(const bContext *C, Panel *panel) subcol->prop(ptr, "fade_thickness_strength", UI_ITEM_NONE, IFACE_("Thickness"), ICON_NONE); subcol->prop(ptr, "fade_opacity_strength", UI_ITEM_NONE, IFACE_("Opacity"), ICON_NONE); - uiItemPointerR(col, - ptr, - "target_vertex_group", - &ob_ptr, - "vertex_groups", - IFACE_("Weight Output"), - ICON_NONE); + col->prop_search( + ptr, "target_vertex_group", &ob_ptr, "vertex_groups", IFACE_("Weight Output"), ICON_NONE); } if (uiLayout *influence_panel = layout->panel_prop( diff --git a/source/blender/modifiers/intern/MOD_grease_pencil_hook.cc b/source/blender/modifiers/intern/MOD_grease_pencil_hook.cc index de5e14d9fa8..8415160aa2f 100644 --- a/source/blender/modifiers/intern/MOD_grease_pencil_hook.cc +++ b/source/blender/modifiers/intern/MOD_grease_pencil_hook.cc @@ -277,8 +277,7 @@ static void panel_draw(const bContext *C, Panel *panel) RNA_enum_get(&hook_object_ptr, "type") == OB_ARMATURE) { PointerRNA hook_object_data_ptr = RNA_pointer_get(&hook_object_ptr, "data"); - uiItemPointerR( - col, ptr, "subtarget", &hook_object_data_ptr, "bones", IFACE_("Bone"), ICON_NONE); + col->prop_search(ptr, "subtarget", &hook_object_data_ptr, "bones", IFACE_("Bone"), ICON_NONE); } layout->prop(ptr, "strength", UI_ITEM_R_SLIDER, std::nullopt, ICON_NONE); diff --git a/source/blender/modifiers/intern/MOD_grease_pencil_util.cc b/source/blender/modifiers/intern/MOD_grease_pencil_util.cc index c91aa9666dc..e534fb8dd48 100644 --- a/source/blender/modifiers/intern/MOD_grease_pencil_util.cc +++ b/source/blender/modifiers/intern/MOD_grease_pencil_util.cc @@ -107,22 +107,20 @@ void draw_layer_filter_settings(const bContext * /*C*/, uiLayout *layout, Pointe row = &col->row(true); row->use_property_decorate_set(false); if (use_layer_group_filter) { - uiItemPointerR(row, - ptr, - "tree_node_filter", - &obj_data_ptr, - "layer_groups", - "Group", - ICON_GREASEPENCIL_LAYER_GROUP); + row->prop_search(ptr, + "tree_node_filter", + &obj_data_ptr, + "layer_groups", + "Group", + ICON_GREASEPENCIL_LAYER_GROUP); } else { - uiItemPointerR(row, - ptr, - "tree_node_filter", - &obj_data_ptr, - "layers", - std::nullopt, - ICON_OUTLINER_DATA_GP_LAYER); + row->prop_search(ptr, + "tree_node_filter", + &obj_data_ptr, + "layers", + std::nullopt, + ICON_OUTLINER_DATA_GP_LAYER); } sub = &row->row(true); sub->prop(ptr, "use_layer_group_filter", UI_ITEM_NONE, "", ICON_GREASEPENCIL_LAYER_GROUP); @@ -150,8 +148,8 @@ void draw_material_filter_settings(const bContext * /*C*/, uiLayout *layout, Poi col = &layout->column(true); row = &col->row(true); row->use_property_decorate_set(false); - uiItemPointerR( - row, ptr, "material_filter", &obj_data_ptr, "materials", std::nullopt, ICON_SHADING_TEXTURE); + row->prop_search( + ptr, "material_filter", &obj_data_ptr, "materials", std::nullopt, ICON_SHADING_TEXTURE); sub = &row->row(true); sub->prop(ptr, "invert_material_filter", UI_ITEM_NONE, "", ICON_ARROW_LEFTRIGHT); @@ -176,7 +174,7 @@ void draw_vertex_group_settings(const bContext * /*C*/, uiLayout *layout, Pointe col = &layout->column(true); row = &col->row(true); row->use_property_decorate_set(false); - uiItemPointerR(row, ptr, "vertex_group_name", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE); + row->prop_search(ptr, "vertex_group_name", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE); sub = &row->row(true); sub->active_set(has_vertex_group); sub->use_property_decorate_set(false); diff --git a/source/blender/modifiers/intern/MOD_grease_pencil_weight_angle.cc b/source/blender/modifiers/intern/MOD_grease_pencil_weight_angle.cc index 7730089d024..1338d21d136 100644 --- a/source/blender/modifiers/intern/MOD_grease_pencil_weight_angle.cc +++ b/source/blender/modifiers/intern/MOD_grease_pencil_weight_angle.cc @@ -230,8 +230,7 @@ static void panel_draw(const bContext *C, Panel *panel) layout->use_property_split_set(true); row = &layout->row(true); - uiItemPointerR( - row, ptr, "target_vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE); + row->prop_search(ptr, "target_vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE); sub = &row->row(true); bool has_output = RNA_string_length(ptr, "target_vertex_group") != 0; diff --git a/source/blender/modifiers/intern/MOD_grease_pencil_weight_proximity.cc b/source/blender/modifiers/intern/MOD_grease_pencil_weight_proximity.cc index 647df6e61a8..f6e31fa1e3e 100644 --- a/source/blender/modifiers/intern/MOD_grease_pencil_weight_proximity.cc +++ b/source/blender/modifiers/intern/MOD_grease_pencil_weight_proximity.cc @@ -253,8 +253,7 @@ static void panel_draw(const bContext *C, Panel *panel) layout->use_property_split_set(true); row = &layout->row(true); - uiItemPointerR( - row, ptr, "target_vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE); + row->prop_search(ptr, "target_vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_NONE); sub = &row->row(true); bool has_output = RNA_string_length(ptr, "target_vertex_group") != 0; sub->use_property_decorate_set(false); diff --git a/source/blender/modifiers/intern/MOD_hook.cc b/source/blender/modifiers/intern/MOD_hook.cc index 2e2f2ab9149..6374734b551 100644 --- a/source/blender/modifiers/intern/MOD_hook.cc +++ b/source/blender/modifiers/intern/MOD_hook.cc @@ -463,8 +463,7 @@ static void panel_draw(const bContext * /*C*/, Panel *panel) RNA_enum_get(&hook_object_ptr, "type") == OB_ARMATURE) { PointerRNA hook_object_data_ptr = RNA_pointer_get(&hook_object_ptr, "data"); - uiItemPointerR( - col, ptr, "subtarget", &hook_object_data_ptr, "bones", IFACE_("Bone"), ICON_NONE); + col->prop_search(ptr, "subtarget", &hook_object_data_ptr, "bones", IFACE_("Bone"), ICON_NONE); } modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", std::nullopt); diff --git a/source/blender/modifiers/intern/MOD_lineart.cc b/source/blender/modifiers/intern/MOD_lineart.cc index 2d93cf3bb60..a77bc3de2a1 100644 --- a/source/blender/modifiers/intern/MOD_lineart.cc +++ b/source/blender/modifiers/intern/MOD_lineart.cc @@ -249,15 +249,10 @@ static void panel_draw(const bContext * /*C*/, Panel *panel) } uiLayout *col = &layout->column(false); - uiItemPointerR(col, - ptr, - "target_layer", - &obj_data_ptr, - "layers", - std::nullopt, - ICON_OUTLINER_DATA_GP_LAYER); - uiItemPointerR( - col, ptr, "target_material", &obj_data_ptr, "materials", std::nullopt, ICON_MATERIAL); + col->prop_search( + ptr, "target_layer", &obj_data_ptr, "layers", std::nullopt, ICON_OUTLINER_DATA_GP_LAYER); + col->prop_search( + ptr, "target_material", &obj_data_ptr, "materials", std::nullopt, ICON_MATERIAL); col = &layout->column(false); col->prop(ptr, "thickness", UI_ITEM_R_SLIDER, IFACE_("Line Thickness"), ICON_NONE); @@ -646,7 +641,7 @@ static void vgroup_panel_draw(const bContext * /*C*/, Panel *panel) col->prop(ptr, "use_output_vertex_group_match_by_name", UI_ITEM_NONE, std::nullopt, ICON_NONE); - uiItemPointerR(col, ptr, "vertex_group", &ob_ptr, "vertex_groups", IFACE_("Target"), ICON_NONE); + col->prop_search(ptr, "vertex_group", &ob_ptr, "vertex_groups", IFACE_("Target"), ICON_NONE); } static void bake_panel_draw(const bContext * /*C*/, Panel *panel) diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.cc b/source/blender/modifiers/intern/MOD_meshsequencecache.cc index a4a2bd477e7..b1012c8932a 100644 --- a/source/blender/modifiers/intern/MOD_meshsequencecache.cc +++ b/source/blender/modifiers/intern/MOD_meshsequencecache.cc @@ -384,8 +384,8 @@ static void panel_draw(const bContext *C, Panel *panel) uiTemplateCacheFile(layout, C, ptr, "cache_file"); if (has_cache_file) { - uiItemPointerR( - layout, ptr, "object_path", &cache_file_ptr, "object_paths", std::nullopt, ICON_NONE); + layout->prop_search( + ptr, "object_path", &cache_file_ptr, "object_paths", std::nullopt, ICON_NONE); } if (RNA_enum_get(&ob_ptr, "type") == OB_MESH) { diff --git a/source/blender/modifiers/intern/MOD_particleinstance.cc b/source/blender/modifiers/intern/MOD_particleinstance.cc index e0eddc9b4a1..d5ff436ea20 100644 --- a/source/blender/modifiers/intern/MOD_particleinstance.cc +++ b/source/blender/modifiers/intern/MOD_particleinstance.cc @@ -533,13 +533,12 @@ static void panel_draw(const bContext * /*C*/, Panel *panel) layout->prop(ptr, "object", UI_ITEM_NONE, std::nullopt, ICON_NONE); if (!RNA_pointer_is_null(&particle_obj_ptr)) { - uiItemPointerR(layout, - ptr, - "particle_system", - &particle_obj_ptr, - "particle_systems", - IFACE_("Particle System"), - ICON_NONE); + layout->prop_search(ptr, + "particle_system", + &particle_obj_ptr, + "particle_systems", + IFACE_("Particle System"), + ICON_NONE); } else { layout->prop(ptr, "particle_system_index", UI_ITEM_NONE, IFACE_("Particle System"), ICON_NONE); @@ -613,10 +612,10 @@ static void layers_panel_draw(const bContext * /*C*/, Panel *panel) layout->use_property_split_set(true); col = &layout->column(false); - uiItemPointerR( - col, ptr, "index_layer_name", &obj_data_ptr, "vertex_colors", IFACE_("Index"), ICON_NONE); - uiItemPointerR( - col, ptr, "value_layer_name", &obj_data_ptr, "vertex_colors", IFACE_("Value"), ICON_NONE); + col->prop_search( + ptr, "index_layer_name", &obj_data_ptr, "vertex_colors", IFACE_("Index"), ICON_NONE); + col->prop_search( + ptr, "value_layer_name", &obj_data_ptr, "vertex_colors", IFACE_("Value"), ICON_NONE); } static void panel_register(ARegionType *region_type) diff --git a/source/blender/modifiers/intern/MOD_solidify.cc b/source/blender/modifiers/intern/MOD_solidify.cc index 3f99226d9f0..c5796a10b21 100644 --- a/source/blender/modifiers/intern/MOD_solidify.cc +++ b/source/blender/modifiers/intern/MOD_solidify.cc @@ -214,15 +214,14 @@ static void vertex_group_panel_draw(const bContext * /*C*/, Panel *panel) layout->use_property_split_set(true); col = &layout->column(false); - uiItemPointerR( - col, ptr, "shell_vertex_group", &ob_ptr, "vertex_groups", IFACE_("Shell"), ICON_NONE); - uiItemPointerR(col, - ptr, - "rim_vertex_group", - &ob_ptr, - "vertex_groups", - CTX_IFACE_(BLT_I18NCONTEXT_ID_MESH, "Rim"), - ICON_NONE); + col->prop_search( + ptr, "shell_vertex_group", &ob_ptr, "vertex_groups", IFACE_("Shell"), ICON_NONE); + col->prop_search(ptr, + "rim_vertex_group", + &ob_ptr, + "vertex_groups", + CTX_IFACE_(BLT_I18NCONTEXT_ID_MESH, "Rim"), + ICON_NONE); } static void panel_register(ARegionType *region_type) diff --git a/source/blender/modifiers/intern/MOD_ui_common.cc b/source/blender/modifiers/intern/MOD_ui_common.cc index 6dbd233157b..290d108a3d5 100644 --- a/source/blender/modifiers/intern/MOD_ui_common.cc +++ b/source/blender/modifiers/intern/MOD_ui_common.cc @@ -133,7 +133,7 @@ void modifier_vgroup_ui(uiLayout *layout, bool has_vertex_group = RNA_string_length(ptr, vgroup_prop.c_str()) != 0; uiLayout *row = &layout->row(true); - uiItemPointerR(row, ptr, vgroup_prop, ob_ptr, "vertex_groups", text, ICON_GROUP_VERTEX); + row->prop_search(ptr, vgroup_prop, ob_ptr, "vertex_groups", text, ICON_GROUP_VERTEX); if (invert_vgroup_prop) { uiLayout *sub = &row->row(true); sub->active_set(has_vertex_group); diff --git a/source/blender/modifiers/intern/MOD_uvproject.cc b/source/blender/modifiers/intern/MOD_uvproject.cc index 669b7ab9e4e..0dd1d1f63da 100644 --- a/source/blender/modifiers/intern/MOD_uvproject.cc +++ b/source/blender/modifiers/intern/MOD_uvproject.cc @@ -305,8 +305,7 @@ static void panel_draw(const bContext * /*C*/, Panel *panel) layout->use_property_split_set(true); - uiItemPointerR( - layout, ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); + layout->prop_search(ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); /* Aspect and Scale are only used for camera projectors. */ bool has_camera = false; diff --git a/source/blender/modifiers/intern/MOD_uvwarp.cc b/source/blender/modifiers/intern/MOD_uvwarp.cc index 9136bff9706..cce167204d0 100644 --- a/source/blender/modifiers/intern/MOD_uvwarp.cc +++ b/source/blender/modifiers/intern/MOD_uvwarp.cc @@ -251,8 +251,7 @@ static void panel_draw(const bContext * /*C*/, Panel *panel) layout->use_property_split_set(true); - uiItemPointerR( - layout, ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); + layout->prop_search(ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); col = &layout->column(false); col->prop(ptr, "center", UI_ITEM_NONE, std::nullopt, ICON_NONE); @@ -266,15 +265,14 @@ static void panel_draw(const bContext * /*C*/, Panel *panel) warp_obj_ptr = RNA_pointer_get(ptr, "object_from"); if (!RNA_pointer_is_null(&warp_obj_ptr) && RNA_enum_get(&warp_obj_ptr, "type") == OB_ARMATURE) { PointerRNA warp_obj_data_ptr = RNA_pointer_get(&warp_obj_ptr, "data"); - uiItemPointerR( - col, ptr, "bone_from", &warp_obj_data_ptr, "bones", std::nullopt, ICON_BONE_DATA); + col->prop_search(ptr, "bone_from", &warp_obj_data_ptr, "bones", std::nullopt, ICON_BONE_DATA); } col->prop(ptr, "object_to", UI_ITEM_NONE, CTX_IFACE_(BLT_I18NCONTEXT_MODIFIER, "To"), ICON_NONE); warp_obj_ptr = RNA_pointer_get(ptr, "object_to"); if (!RNA_pointer_is_null(&warp_obj_ptr) && RNA_enum_get(&warp_obj_ptr, "type") == OB_ARMATURE) { PointerRNA warp_obj_data_ptr = RNA_pointer_get(&warp_obj_ptr, "data"); - uiItemPointerR(col, ptr, "bone_to", &warp_obj_data_ptr, "bones", std::nullopt, ICON_BONE_DATA); + col->prop_search(ptr, "bone_to", &warp_obj_data_ptr, "bones", std::nullopt, ICON_BONE_DATA); } modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", std::nullopt); diff --git a/source/blender/modifiers/intern/MOD_warp.cc b/source/blender/modifiers/intern/MOD_warp.cc index f41db08c95e..87c903a63ab 100644 --- a/source/blender/modifiers/intern/MOD_warp.cc +++ b/source/blender/modifiers/intern/MOD_warp.cc @@ -355,8 +355,8 @@ static void panel_draw(const bContext * /*C*/, Panel *panel) if (!RNA_pointer_is_null(&from_obj_ptr) && RNA_enum_get(&from_obj_ptr, "type") == OB_ARMATURE) { PointerRNA from_obj_data_ptr = RNA_pointer_get(&from_obj_ptr, "data"); - uiItemPointerR( - col, ptr, "bone_from", &from_obj_data_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA); + col->prop_search( + ptr, "bone_from", &from_obj_data_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA); } col = &layout->column(true); @@ -364,7 +364,7 @@ static void panel_draw(const bContext * /*C*/, Panel *panel) PointerRNA to_obj_ptr = RNA_pointer_get(ptr, "object_to"); if (!RNA_pointer_is_null(&to_obj_ptr) && RNA_enum_get(&to_obj_ptr, "type") == OB_ARMATURE) { PointerRNA to_obj_data_ptr = RNA_pointer_get(&to_obj_ptr, "data"); - uiItemPointerR(col, ptr, "bone_to", &to_obj_data_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA); + col->prop_search(ptr, "bone_to", &to_obj_data_ptr, "bones", IFACE_("Bone"), ICON_BONE_DATA); } layout->prop(ptr, "use_volume_preserve", UI_ITEM_NONE, std::nullopt, ICON_NONE); @@ -420,18 +420,17 @@ static void texture_panel_draw(const bContext *C, Panel *panel) (RNA_enum_get(&texture_coords_obj_ptr, "type") == OB_ARMATURE)) { PointerRNA texture_coords_obj_data_ptr = RNA_pointer_get(&texture_coords_obj_ptr, "data"); - uiItemPointerR(col, - ptr, - "texture_coords_bone", - &texture_coords_obj_data_ptr, - "bones", - IFACE_("Bone"), - ICON_NONE); + col->prop_search(ptr, + "texture_coords_bone", + &texture_coords_obj_data_ptr, + "bones", + IFACE_("Bone"), + ICON_NONE); } } else if (texture_coords == MOD_DISP_MAP_UV && RNA_enum_get(&ob_ptr, "type") == OB_MESH) { PointerRNA obj_data_ptr = RNA_pointer_get(&ob_ptr, "data"); - uiItemPointerR(col, ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); + col->prop_search(ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); } } diff --git a/source/blender/modifiers/intern/MOD_wave.cc b/source/blender/modifiers/intern/MOD_wave.cc index 594f406f61c..f7f99bba8f5 100644 --- a/source/blender/modifiers/intern/MOD_wave.cc +++ b/source/blender/modifiers/intern/MOD_wave.cc @@ -382,18 +382,17 @@ static void texture_panel_draw(const bContext *C, Panel *panel) (RNA_enum_get(&texture_coords_obj_ptr, "type") == OB_ARMATURE)) { PointerRNA texture_coords_obj_data_ptr = RNA_pointer_get(&texture_coords_obj_ptr, "data"); - uiItemPointerR(col, - ptr, - "texture_coords_bone", - &texture_coords_obj_data_ptr, - "bones", - IFACE_("Bone"), - ICON_NONE); + col->prop_search(ptr, + "texture_coords_bone", + &texture_coords_obj_data_ptr, + "bones", + IFACE_("Bone"), + ICON_NONE); } } else if (texture_coords == MOD_DISP_MAP_UV && RNA_enum_get(&ob_ptr, "type") == OB_MESH) { PointerRNA obj_data_ptr = RNA_pointer_get(&ob_ptr, "data"); - uiItemPointerR(col, ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); + col->prop_search(ptr, "uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_GROUP_UVS); } } diff --git a/source/blender/modifiers/intern/MOD_weightvg_util.cc b/source/blender/modifiers/intern/MOD_weightvg_util.cc index a2dc7f21885..1cd2629a964 100644 --- a/source/blender/modifiers/intern/MOD_weightvg_util.cc +++ b/source/blender/modifiers/intern/MOD_weightvg_util.cc @@ -345,8 +345,8 @@ void weightvg_ui_common(const bContext *C, PointerRNA *ob_ptr, PointerRNA *ptr, } else if (mask_tex_mapping == MOD_DISP_MAP_UV && RNA_enum_get(ob_ptr, "type") == OB_MESH) { PointerRNA obj_data_ptr = RNA_pointer_get(ob_ptr, "data"); - uiItemPointerR( - layout, ptr, "mask_tex_uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_NONE); + layout->prop_search( + ptr, "mask_tex_uv_layer", &obj_data_ptr, "uv_layers", std::nullopt, ICON_NONE); } } } diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.cc b/source/blender/modifiers/intern/MOD_weightvgedit.cc index 454aa58adbe..786695ba024 100644 --- a/source/blender/modifiers/intern/MOD_weightvgedit.cc +++ b/source/blender/modifiers/intern/MOD_weightvgedit.cc @@ -295,8 +295,7 @@ static void panel_draw(const bContext * /*C*/, Panel *panel) layout->use_property_split_set(true); col = &layout->column(true); - uiItemPointerR( - col, ptr, "vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_GROUP_VERTEX); + col->prop_search(ptr, "vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_GROUP_VERTEX); layout->prop(ptr, "default_weight", UI_ITEM_R_SLIDER, std::nullopt, ICON_NONE); diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.cc b/source/blender/modifiers/intern/MOD_weightvgproximity.cc index 9fa61354f45..dfcd90f8874 100644 --- a/source/blender/modifiers/intern/MOD_weightvgproximity.cc +++ b/source/blender/modifiers/intern/MOD_weightvgproximity.cc @@ -635,8 +635,8 @@ static void panel_draw(const bContext * /*C*/, Panel *panel) layout->use_property_split_set(true); - uiItemPointerR( - layout, ptr, "vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_GROUP_VERTEX); + layout->prop_search( + ptr, "vertex_group", &ob_ptr, "vertex_groups", std::nullopt, ICON_GROUP_VERTEX); layout->prop(ptr, "target", UI_ITEM_NONE, std::nullopt, ICON_NONE); diff --git a/source/blender/nodes/composite/nodes/node_composite_keyingscreen.cc b/source/blender/nodes/composite/nodes/node_composite_keyingscreen.cc index 1189add52da..60b862fb46d 100644 --- a/source/blender/nodes/composite/nodes/node_composite_keyingscreen.cc +++ b/source/blender/nodes/composite/nodes/node_composite_keyingscreen.cc @@ -81,7 +81,7 @@ static void node_composit_buts_keyingscreen(uiLayout *layout, bContext *C, Point &clip->id, &RNA_MovieTracking, &clip->tracking); col = &layout->column(true); - uiItemPointerR(col, ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA); + col->prop_search(ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA); } } diff --git a/source/blender/nodes/composite/nodes/node_composite_planetrackdeform.cc b/source/blender/nodes/composite/nodes/node_composite_planetrackdeform.cc index adfd2011e14..4c95d8f4239 100644 --- a/source/blender/nodes/composite/nodes/node_composite_planetrackdeform.cc +++ b/source/blender/nodes/composite/nodes/node_composite_planetrackdeform.cc @@ -61,7 +61,7 @@ static void cmp_node_planetrackdeform_declare(NodeDeclarationBuilder &b) &clip->id, &RNA_MovieTracking, tracking); uiLayout *col = &layout->column(false); - uiItemPointerR(col, ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA); + col->prop_search(ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA); tracking_object = BKE_tracking_object_get_named(tracking, node_storage(*node).tracking_object); @@ -69,8 +69,7 @@ static void cmp_node_planetrackdeform_declare(NodeDeclarationBuilder &b) PointerRNA object_ptr = RNA_pointer_create_discrete( &clip->id, &RNA_MovieTrackingObject, tracking_object); - uiItemPointerR( - col, ptr, "plane_track_name", &object_ptr, "plane_tracks", "", ICON_ANIM_DATA); + col->prop_search(ptr, "plane_track_name", &object_ptr, "plane_tracks", "", ICON_ANIM_DATA); } else { layout->prop(ptr, "plane_track_name", UI_ITEM_NONE, "", ICON_ANIM_DATA); diff --git a/source/blender/nodes/composite/nodes/node_composite_trackpos.cc b/source/blender/nodes/composite/nodes/node_composite_trackpos.cc index d76436b1bc1..d3fee150c6b 100644 --- a/source/blender/nodes/composite/nodes/node_composite_trackpos.cc +++ b/source/blender/nodes/composite/nodes/node_composite_trackpos.cc @@ -80,14 +80,14 @@ static void node_composit_buts_trackpos(uiLayout *layout, bContext *C, PointerRN PointerRNA tracking_ptr = RNA_pointer_create_discrete(&clip->id, &RNA_MovieTracking, tracking); col = &layout->column(false); - uiItemPointerR(col, ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA); + col->prop_search(ptr, "tracking_object", &tracking_ptr, "objects", "", ICON_OBJECT_DATA); tracking_object = BKE_tracking_object_get_named(tracking, data->tracking_object); if (tracking_object) { PointerRNA object_ptr = RNA_pointer_create_discrete( &clip->id, &RNA_MovieTrackingObject, tracking_object); - uiItemPointerR(col, ptr, "track_name", &object_ptr, "tracks", "", ICON_ANIM_DATA); + col->prop_search(ptr, "track_name", &object_ptr, "tracks", "", ICON_ANIM_DATA); } else { layout->prop(ptr, "track_name", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_ANIM_DATA); diff --git a/source/blender/nodes/intern/geometry_nodes_caller_ui.cc b/source/blender/nodes/intern/geometry_nodes_caller_ui.cc index bfbc4a53959..99b167f6644 100644 --- a/source/blender/nodes/intern/geometry_nodes_caller_ui.cc +++ b/source/blender/nodes/intern/geometry_nodes_caller_ui.cc @@ -494,36 +494,35 @@ static void draw_property_for_socket(DrawGroupInputsContext &ctx, const std::string rna_path = fmt::format("[\"{}\"]", BLI_str_escape(identifier.c_str())); - /* Use #uiItemPointerR to draw pointer properties because #uiLayout::prop would not have enough - * information about what type of ID to select for editing the values. This is because + /* Use #uiLayout::prop_search to draw pointer properties because #uiLayout::prop would not have + * enough information about what type of ID to select for editing the values. This is because * pointer IDProperties contain no information about their type. */ const bke::bNodeSocketType *typeinfo = socket.socket_typeinfo(); const eNodeSocketDatatype type = typeinfo ? typeinfo->type : SOCK_CUSTOM; const char *name = socket.name ? IFACE_(socket.name) : ""; switch (type) { case SOCK_OBJECT: { - uiItemPointerR( - row, ctx.properties_ptr, rna_path, ctx.bmain_ptr, "objects", name, ICON_OBJECT_DATA); + row->prop_search( + ctx.properties_ptr, rna_path, ctx.bmain_ptr, "objects", name, ICON_OBJECT_DATA); break; } case SOCK_COLLECTION: { - uiItemPointerR(row, - ctx.properties_ptr, - rna_path, - ctx.bmain_ptr, - "collections", - name, - ICON_OUTLINER_COLLECTION); + row->prop_search(ctx.properties_ptr, + rna_path, + ctx.bmain_ptr, + "collections", + name, + ICON_OUTLINER_COLLECTION); break; } case SOCK_MATERIAL: { - uiItemPointerR( - row, ctx.properties_ptr, rna_path, ctx.bmain_ptr, "materials", name, ICON_MATERIAL); + row->prop_search( + ctx.properties_ptr, rna_path, ctx.bmain_ptr, "materials", name, ICON_MATERIAL); break; } case SOCK_TEXTURE: { - uiItemPointerR( - row, ctx.properties_ptr, rna_path, ctx.bmain_ptr, "textures", name, ICON_TEXTURE); + row->prop_search( + ctx.properties_ptr, rna_path, ctx.bmain_ptr, "textures", name, ICON_TEXTURE); break; } case SOCK_IMAGE: { diff --git a/source/blender/nodes/shader/nodes/node_shader_normal_map.cc b/source/blender/nodes/shader/nodes/node_shader_normal_map.cc index 2e421d55587..f50c96955d6 100644 --- a/source/blender/nodes/shader/nodes/node_shader_normal_map.cc +++ b/source/blender/nodes/shader/nodes/node_shader_normal_map.cc @@ -46,7 +46,7 @@ static void node_shader_buts_normal_map(uiLayout *layout, bContext *C, PointerRN if (depsgraph) { Object *object_eval = DEG_get_evaluated(depsgraph, object); PointerRNA dataptr = RNA_id_pointer_create(static_cast(object_eval->data)); - uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS); + layout->prop_search(ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS); return; } } diff --git a/source/blender/nodes/shader/nodes/node_shader_tangent.cc b/source/blender/nodes/shader/nodes/node_shader_tangent.cc index f99dc529253..915fae12a10 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tangent.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tangent.cc @@ -35,7 +35,7 @@ static void node_shader_buts_tangent(uiLayout *layout, bContext *C, PointerRNA * if (depsgraph) { Object *object_eval = DEG_get_evaluated(depsgraph, object); PointerRNA dataptr = RNA_id_pointer_create(static_cast(object_eval->data)); - uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS); + layout->prop_search(ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS); return; } } diff --git a/source/blender/nodes/shader/nodes/node_shader_uvmap.cc b/source/blender/nodes/shader/nodes/node_shader_uvmap.cc index a2c95761c41..4054f20fdfe 100644 --- a/source/blender/nodes/shader/nodes/node_shader_uvmap.cc +++ b/source/blender/nodes/shader/nodes/node_shader_uvmap.cc @@ -37,7 +37,7 @@ static void node_shader_buts_uvmap(uiLayout *layout, bContext *C, PointerRNA *pt if (depsgraph) { Object *object_eval = DEG_get_evaluated(depsgraph, object); PointerRNA dataptr = RNA_id_pointer_create(static_cast(object_eval->data)); - uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS); + layout->prop_search(ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS); return; } } diff --git a/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc b/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc index fbc86a8a7c9..31659a1ac75 100644 --- a/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc +++ b/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc @@ -33,7 +33,7 @@ static void node_shader_buts_vertex_color(uiLayout *layout, bContext *C, Pointer if (depsgraph) { Object *object_eval = DEG_get_evaluated(depsgraph, object); PointerRNA dataptr = RNA_id_pointer_create(static_cast(object_eval->data)); - uiItemPointerR(layout, ptr, "layer_name", &dataptr, "color_attributes", "", ICON_GROUP_VCOL); + layout->prop_search(ptr, "layer_name", &dataptr, "color_attributes", "", ICON_GROUP_VCOL); return; } }