disable the readonly state while rna property callbacks run.
This commit is contained in:
@@ -185,9 +185,14 @@ void bpy_prop_update_cb(struct bContext *C, struct PointerRNA *ptr, struct Prope
|
|||||||
PyObject *args;
|
PyObject *args;
|
||||||
PyObject *self;
|
PyObject *self;
|
||||||
PyObject *ret;
|
PyObject *ret;
|
||||||
|
const int is_write_ok= pyrna_write_check();
|
||||||
|
|
||||||
BLI_assert(py_data != NULL);
|
BLI_assert(py_data != NULL);
|
||||||
|
|
||||||
|
if(!is_write_ok) {
|
||||||
|
pyrna_write_set(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
bpy_context_set(C, &gilstate);
|
bpy_context_set(C, &gilstate);
|
||||||
|
|
||||||
py_func= py_data[BPY_DATA_CB_SLOT_UPDATE];
|
py_func= py_data[BPY_DATA_CB_SLOT_UPDATE];
|
||||||
@@ -216,6 +221,10 @@ void bpy_prop_update_cb(struct bContext *C, struct PointerRNA *ptr, struct Prope
|
|||||||
}
|
}
|
||||||
|
|
||||||
bpy_context_clear(C, &gilstate);
|
bpy_context_clear(C, &gilstate);
|
||||||
|
|
||||||
|
if(!is_write_ok) {
|
||||||
|
pyrna_write_set(FALSE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bpy_prop_callback_check(PyObject *py_func, int argcount)
|
static int bpy_prop_callback_check(PyObject *py_func, int argcount)
|
||||||
|
@@ -323,11 +323,20 @@ int pyrna_write_check(void)
|
|||||||
{
|
{
|
||||||
return !rna_disallow_writes;
|
return !rna_disallow_writes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pyrna_write_set(int val)
|
||||||
|
{
|
||||||
|
rna_disallow_writes= !val;
|
||||||
|
}
|
||||||
#else // USE_PEDANTIC_WRITE
|
#else // USE_PEDANTIC_WRITE
|
||||||
int pyrna_write_check(void)
|
int pyrna_write_check(void)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
void pyrna_write_set(int UNUSED(val))
|
||||||
|
{
|
||||||
|
/* nothing */
|
||||||
|
}
|
||||||
#endif // USE_PEDANTIC_WRITE
|
#endif // USE_PEDANTIC_WRITE
|
||||||
|
|
||||||
static Py_ssize_t pyrna_prop_collection_length(BPy_PropertyRNA *self);
|
static Py_ssize_t pyrna_prop_collection_length(BPy_PropertyRNA *self);
|
||||||
|
@@ -183,6 +183,7 @@ PyObject *pyrna_math_object_from_array(PointerRNA *ptr, PropertyRNA *prop);
|
|||||||
int pyrna_array_contains_py(PointerRNA *ptr, PropertyRNA *prop, PyObject *value);
|
int pyrna_array_contains_py(PointerRNA *ptr, PropertyRNA *prop, PyObject *value);
|
||||||
|
|
||||||
int pyrna_write_check(void);
|
int pyrna_write_check(void);
|
||||||
|
void pyrna_write_set(int val);
|
||||||
|
|
||||||
int pyrna_struct_validity_check(BPy_StructRNA *pysrna);
|
int pyrna_struct_validity_check(BPy_StructRNA *pysrna);
|
||||||
int pyrna_prop_validity_check(BPy_PropertyRNA *self);
|
int pyrna_prop_validity_check(BPy_PropertyRNA *self);
|
||||||
|
Reference in New Issue
Block a user