PyAPI: support PyGetSetDef when extending RNA types
Support extending properties as well as methods.
This commit is contained in:
parent
8f4f3cce03
commit
75d0287cee
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -220,7 +220,9 @@ int pyrna_enum_value_from_id(const EnumPropertyItem *item,
|
|||
|
||||
int pyrna_deferred_register_class(struct StructRNA *srna, PyTypeObject *py_class);
|
||||
|
||||
void pyrna_struct_type_extend_capi(struct StructRNA *srna, struct PyMethodDef *py_method);
|
||||
void pyrna_struct_type_extend_capi(struct StructRNA *srna,
|
||||
struct PyMethodDef *py_method,
|
||||
struct PyGetSetDef *py_getset);
|
||||
|
||||
/* called before stopping python */
|
||||
void pyrna_alloc_types(void);
|
||||
|
|
|
@ -121,9 +121,8 @@ static struct PyMethodDef pyrna_space_methods[] = {
|
|||
|
||||
void BPY_rna_types_extend_capi(void)
|
||||
{
|
||||
pyrna_struct_type_extend_capi(&RNA_Space, pyrna_space_methods);
|
||||
pyrna_struct_type_extend_capi(
|
||||
&RNA_WindowManager, pyrna_windowmanager_methods);
|
||||
pyrna_struct_type_extend_capi(&RNA_Space, pyrna_space_methods, NULL);
|
||||
pyrna_struct_type_extend_capi(&RNA_WindowManager, pyrna_windowmanager_methods, NULL);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
|
Loading…
Reference in New Issue