diff options
Diffstat (limited to 'source/blender/editors')
4 files changed, 24 insertions, 12 deletions
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c index 0afd67e5e66..68d21e88211 100644 --- a/source/blender/editors/interface/interface_ops.c +++ b/source/blender/editors/interface/interface_ops.c @@ -100,10 +100,12 @@ static bool copy_data_path_button_poll(bContext *C) static int copy_data_path_button_exec(bContext *C, wmOperator *op) { + Main *bmain = CTX_data_main(C); PointerRNA ptr; PropertyRNA *prop; char *path; int index; + ID *id; const bool full_path = RNA_boolean_get(op->ptr, "full_path"); @@ -111,18 +113,20 @@ static int copy_data_path_button_exec(bContext *C, wmOperator *op) UI_context_active_but_prop_get(C, &ptr, &prop, &index); if (ptr.owner_id != NULL) { - if (full_path) { - if (prop) { - path = RNA_path_full_property_py_ex(&ptr, prop, index, true); + path = RNA_path_full_property_py_ex(bmain, &ptr, prop, index, true); } else { - path = RNA_path_full_struct_py(&ptr); + path = RNA_path_full_struct_py(bmain, &ptr); } } else { - path = RNA_path_from_ID_to_property(&ptr, prop); + path = RNA_path_from_real_ID_to_property_index(bmain, &ptr, prop, 0, -1, &id); + + if (!path) { + path = RNA_path_from_ID_to_property(&ptr, prop); + } } if (path) { @@ -185,8 +189,9 @@ static bool copy_as_driver_button_poll(bContext *C) return 0; } -static int copy_as_driver_button_exec(bContext *C, wmOperator *UNUSED(op)) +static int copy_as_driver_button_exec(bContext *C, wmOperator *op) { + Main *bmain = CTX_data_main(C); PointerRNA ptr; PropertyRNA *prop; int index; @@ -195,14 +200,19 @@ static int copy_as_driver_button_exec(bContext *C, wmOperator *UNUSED(op)) UI_context_active_but_prop_get(C, &ptr, &prop, &index); if (ptr.owner_id && ptr.data && prop) { + ID *id; int dim = RNA_property_array_dimension(&ptr, prop, NULL); - char *path = RNA_path_from_ID_to_property_index(&ptr, prop, dim, index); + char *path = RNA_path_from_real_ID_to_property_index(bmain, &ptr, prop, dim, index, &id); if (path) { - ANIM_copy_as_driver(ptr.owner_id, path, RNA_property_identifier(prop)); + ANIM_copy_as_driver(id, path, RNA_property_identifier(prop)); MEM_freeN(path); return OPERATOR_FINISHED; } + else { + BKE_reportf(op->reports, RPT_ERROR, "Could not compute a valid data path"); + return OPERATOR_CANCELLED; + } } return OPERATOR_CANCELLED; diff --git a/source/blender/editors/interface/interface_region_tooltip.c b/source/blender/editors/interface/interface_region_tooltip.c index f2ca9cebf7b..7387fe5eb1c 100644 --- a/source/blender/editors/interface/interface_region_tooltip.c +++ b/source/blender/editors/interface/interface_region_tooltip.c @@ -860,10 +860,10 @@ static uiTooltipData *ui_tooltip_data_from_button(bContext *C, uiBut *but) /* move ownership (no need for re-alloc) */ if (but->rnaprop) { field->text = RNA_path_full_property_py_ex( - &but->rnapoin, but->rnaprop, but->rnaindex, true); + CTX_data_main(C), &but->rnapoin, but->rnaprop, but->rnaindex, true); } else { - field->text = RNA_path_full_struct_py(&but->rnapoin); + field->text = RNA_path_full_struct_py(CTX_data_main(C), &but->rnapoin); } } } diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 999255aef88..f5c02dbd724 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -26,6 +26,7 @@ #include "BLI_blenlib.h" #include "BLI_utildefines.h" +#include "BKE_global.h" #include "BKE_context.h" #include "BKE_screen.h" @@ -173,7 +174,7 @@ static void id_drop_copy(wmDrag *drag, wmDropBox *drop) ID *id = WM_drag_ID(drag, 0); /* copy drag path to properties */ - char *text = RNA_path_full_ID_py(id); + char *text = RNA_path_full_ID_py(G_MAIN, id); RNA_string_set(drop->ptr, "text", text); MEM_freeN(text); } diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index c1a3c79b0d8..9f39313b9ab 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -29,6 +29,7 @@ #include "BLI_blenlib.h" +#include "BKE_global.h" #include "BKE_context.h" #include "BKE_library.h" #include "BKE_screen.h" @@ -356,7 +357,7 @@ static void text_drop_paste(wmDrag *drag, wmDropBox *drop) ID *id = WM_drag_ID(drag, 0); /* copy drag path to properties */ - text = RNA_path_full_ID_py(id); + text = RNA_path_full_ID_py(G_MAIN, id); RNA_string_set(drop->ptr, "text", text); MEM_freeN(text); } |