From bea62c5c1a5c98eacbe29e3d5b0b803f42c41f4b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 30 Jun 2018 18:05:01 +0200 Subject: Cleanup: split out context member query --- source/blender/windowmanager/intern/wm_operators.c | 60 ++++++++++------------ 1 file changed, 26 insertions(+), 34 deletions(-) (limited to 'source/blender/windowmanager/intern/wm_operators.c') diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 7eeb2ce762e..ed2cb1134d8 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -742,9 +742,8 @@ bool WM_operator_pystring_abbreviate(char *str, int str_len_max) /* return NULL if no match is found */ #if 0 -static char *wm_prop_pystring_from_context(bContext *C, PointerRNA *ptr, PropertyRNA *prop, int index) +static const char *wm_context_member_from_ptr(bContext *C, PointerRNA *ptr) { - /* loop over all context items and do 2 checks * * - see if the pointer is in the context. @@ -758,13 +757,9 @@ static char *wm_prop_pystring_from_context(bContext *C, PointerRNA *ptr, Propert const char *member_found = NULL; const char *member_id = NULL; - char *prop_str = NULL; - char *ret = NULL; - - for (link = lb.first; link; link = link->next) { const char *identifier = link->data; - PointerRNA ctx_item_ptr = {{0}} // CTX_data_pointer_get(C, identifier); // XXX, this isnt working + PointerRNA ctx_item_ptr = {{0}}; // CTX_data_pointer_get(C, identifier); // XXX, this isnt working if (ctx_item_ptr.type == NULL) { continue; @@ -785,36 +780,27 @@ static char *wm_prop_pystring_from_context(bContext *C, PointerRNA *ptr, Propert } } } + BLI_freelistN(&lb); if (member_found) { - prop_str = RNA_path_property_py(ptr, prop, index); - if (prop_str) { - ret = BLI_sprintfN("bpy.context.%s.%s", member_found, prop_str); - MEM_freeN(prop_str); - } + return member_found; } else if (member_id) { - prop_str = RNA_path_struct_property_py(ptr, prop, index); - if (prop_str) { - ret = BLI_sprintfN("bpy.context.%s.%s", member_id, prop_str); - MEM_freeN(prop_str); - } + return member_id; + } + else { + return NULL; } - - BLI_freelistN(&lb); - - return ret; } + #else /* use hard coded checks for now */ -static char *wm_prop_pystring_from_context(bContext *C, PointerRNA *ptr, PropertyRNA *prop, int index) + +static const char *wm_context_member_from_ptr(bContext *C, PointerRNA *ptr) { const char *member_id = NULL; - char *prop_str = NULL; - char *ret = NULL; - if (ptr->id.data) { #define CTX_TEST_PTR_ID(C, member, idptr) \ @@ -911,23 +897,29 @@ static char *wm_prop_pystring_from_context(bContext *C, PointerRNA *ptr, Propert default: break; } - - if (member_id) { - prop_str = RNA_path_struct_property_py(ptr, prop, index); - if (prop_str) { - ret = BLI_sprintfN("bpy.context.%s.%s", member_id, prop_str); - MEM_freeN(prop_str); - } - } #undef CTX_TEST_PTR_ID #undef CTX_TEST_PTR_ID_CAST #undef CTX_TEST_SPACE_TYPE } - return ret; + return member_id; } #endif +static char *wm_prop_pystring_from_context(bContext *C, PointerRNA *ptr, PropertyRNA *prop, int index) +{ + const char *member_id = wm_context_member_from_ptr(C, ptr); + char *ret = NULL; + if (member_id != NULL) { + char *prop_str = RNA_path_struct_property_py(ptr, prop, index); + if (prop_str) { + ret = BLI_sprintfN("bpy.context.%s.%s", member_id, prop_str); + MEM_freeN(prop_str); + } + } + return ret; +} + char *WM_prop_pystring_assign(bContext *C, PointerRNA *ptr, PropertyRNA *prop, int index) { char *lhs, *rhs, *ret; -- cgit v1.2.3