Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-05-13 08:57:29 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-05-13 08:57:29 +0300
commit75d0287cee1aae1a94e46d3fb90379ce016eda8c (patch)
treeb2c7cb52b5ff9803b56541e87906bda9eee56c30 /source/blender/python/intern/bpy_rna.c
parent8f4f3cce0393f2fdbf91133feb147096c53fee3d (diff)
PyAPI: support PyGetSetDef when extending RNA types
Support extending properties as well as methods.
Diffstat (limited to 'source/blender/python/intern/bpy_rna.c')
-rw-r--r--source/blender/python/intern/bpy_rna.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index 4da81e3380f..55bf87051ec 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -9034,9 +9034,11 @@ static PyObject *pyrna_unregister_class(PyObject *UNUSED(self), PyObject *py_cla
}
/**
- * Extend RNA types with C/API methods.
+ * Extend RNA types with C/API methods, properties.
*/
-void pyrna_struct_type_extend_capi(struct StructRNA *srna, struct PyMethodDef *method)
+void pyrna_struct_type_extend_capi(struct StructRNA *srna,
+ struct PyMethodDef *method,
+ struct PyGetSetDef *getset)
{
PyObject *cls = pyrna_srna_Subtype(srna);
if (method != NULL) {
@@ -9052,6 +9054,16 @@ void pyrna_struct_type_extend_capi(struct StructRNA *srna, struct PyMethodDef *m
Py_DECREF(args); /* Clears 'func' too. */
}
}
+
+ if (getset != NULL) {
+ for (; getset->name != NULL; getset++) {
+ PyObject *dict = ((PyTypeObject *)cls)->tp_dict;
+ PyObject *descr = PyDescr_NewGetSet((PyTypeObject *)cls, getset);
+ BLI_assert(PyDict_GetItem(dict, PyDescr_NAME(descr)) == NULL);
+ PyDict_SetItem(dict, PyDescr_NAME(descr), descr);
+ Py_DECREF(descr);
+ }
+ }
Py_DECREF(cls);
}