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:
authorHans Goudey <h.goudey@me.com>2021-08-31 19:49:12 +0300
committerHans Goudey <h.goudey@me.com>2021-08-31 19:49:12 +0300
commit60fba8202ce4081516f7224074887327f793bfed (patch)
treea09daff65f2129addf30120e14fcebb7216c9148 /source/blender/python/generic
parentcfc674408ee62e0f7f6b41aff0d1ef4a9fedf6db (diff)
Fix T91088: Assigning custom property value in python resets UI data
Assigning a new value to an IDProperty with the Python API would free the entire contents of the existing property, which unfortunately happened to include the UI data. The fix is to extract the UI data from the existing property before freeing its contents. An alternative would be adding another argument to `IDP_FreePropertyContent_ex`, but this solution is clearer and doesn't increase complexity elsewhere.
Diffstat (limited to 'source/blender/python/generic')
-rw-r--r--source/blender/python/generic/idprop_py_api.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/source/blender/python/generic/idprop_py_api.c b/source/blender/python/generic/idprop_py_api.c
index 58a947943b1..4296474c011 100644
--- a/source/blender/python/generic/idprop_py_api.c
+++ b/source/blender/python/generic/idprop_py_api.c
@@ -714,8 +714,12 @@ bool BPy_IDProperty_Map_ValidateAndCreate(PyObject *name_obj, IDProperty *group,
prop->next = prop_exist->next;
prop->flag = prop_exist->flag;
+ /* Don't free and reset the existing property's UI data, since this only assigns a value. */
+ IDPropertyUIData *ui_data = prop_exist->ui_data;
+ prop_exist->ui_data = NULL;
IDP_FreePropertyContent(prop_exist);
*prop_exist = *prop;
+ prop_exist->ui_data = ui_data;
MEM_freeN(prop);
}
else {