[Bf-blender-cvs] [f410b188320] custom-manipulators: PyAPI: minor improvement to type check

Campbell Barton noreply at git.blender.org
Wed Jun 21 05:19:25 CEST 2017


Commit: f410b18832003a8cc95318b332762dbe4d5739c2
Author: Campbell Barton
Date:   Wed Jun 21 13:23:40 2017 +1000
Branches: custom-manipulators
https://developer.blender.org/rBf410b18832003a8cc95318b332762dbe4d5739c2

PyAPI: minor improvement to type check

===================================================================

M	source/blender/python/intern/bpy_rna.c

===================================================================

diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index 8b122b24cd9..51e179fb317 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -1839,30 +1839,28 @@ static int pyrna_py_to_prop(
 				 * class mixing if this causes problems in the future it should be removed.
 				 */
 				if ((ptr_type == &RNA_AnyType) &&
-				    (BPy_StructRNA_Check(value)) &&
-				    (RNA_struct_is_a(((BPy_StructRNA *)value)->ptr.type, &RNA_Operator)))
+				    (BPy_StructRNA_Check(value)))
 				{
-					value = PyObject_GetAttr(value, bpy_intern_str_properties);
-					value_new = value;
-				}
-				/* XXX, de-duplicate (abive) */
-				else if ((ptr_type == &RNA_AnyType) &&
-				         (BPy_StructRNA_Check(value)) &&
-				    (RNA_struct_is_a(((BPy_StructRNA *)value)->ptr.type, &RNA_Manipulator)))
-				{
-					value = PyObject_GetAttrString(value, "properties");
-					value_new = value;
+					const StructRNA *base_type =
+					        RNA_struct_base_child_of(((const BPy_StructRNA *)value)->ptr.type, NULL);
+					if (ELEM(base_type, &RNA_Operator, &RNA_Manipulator)) {
+						value = PyObject_GetAttr(value, bpy_intern_str_properties);
+						value_new = value;
+					}
 				}
 
-				/* if property is an OperatorProperties pointer and value is a map,
+				/* if property is an OperatorProperties/ManipulatorProperties pointer and value is a map,
 				 * forward back to pyrna_pydict_to_props */
-				if (RNA_struct_is_a(ptr_type, &RNA_OperatorProperties) && PyDict_Check(value)) {
-					PointerRNA opptr = RNA_property_pointer_get(ptr, prop);
-					return pyrna_pydict_to_props(&opptr, value, false, error_prefix);
-				}
-				else if (RNA_struct_is_a(ptr_type, &RNA_ManipulatorProperties) && PyDict_Check(value)) {
-					PointerRNA opptr = RNA_property_pointer_get(ptr, prop);
-					return pyrna_pydict_to_props(&opptr, value, false, error_prefix);
+				if (PyDict_Check(value)) {
+					const StructRNA *base_type = RNA_struct_base_child_of(ptr_type, NULL);
+					if (base_type == &RNA_OperatorProperties) {
+						PointerRNA opptr = RNA_property_pointer_get(ptr, prop);
+						return pyrna_pydict_to_props(&opptr, value, false, error_prefix);
+					}
+					else if (base_type == &RNA_ManipulatorProperties) {
+						PointerRNA opptr = RNA_property_pointer_get(ptr, prop);
+						return pyrna_pydict_to_props(&opptr, value, false, error_prefix);
+					}
 				}
 
 				/* another exception, allow to pass a collection as an RNA property */




More information about the Bf-blender-cvs mailing list