forked from bartvdbraak/blender
exclude self references from the ID search list when PROP_ID_SELF_CHECK is set, also raise an error from python if this is attempted
This commit is contained in:
parent
2bfee787a6
commit
e31d0198e6
@ -157,16 +157,19 @@ static void id_search_cb(const bContext *C, void *arg_template, char *str, uiSea
|
|||||||
{
|
{
|
||||||
TemplateID *template= (TemplateID*)arg_template;
|
TemplateID *template= (TemplateID*)arg_template;
|
||||||
ListBase *lb= template->idlb;
|
ListBase *lb= template->idlb;
|
||||||
ID *id;
|
ID *id, *id_from= template->ptr.id.data;
|
||||||
int iconid;
|
int iconid;
|
||||||
|
int flag= RNA_property_flag(template->prop);
|
||||||
|
|
||||||
/* ID listbase */
|
/* ID listbase */
|
||||||
for(id= lb->first; id; id= id->next) {
|
for(id= lb->first; id; id= id->next) {
|
||||||
if(BLI_strcasestr(id->name+2, str)) {
|
if(!((flag & PROP_ID_SELF_CHECK) && id == id_from)) {
|
||||||
iconid= ui_id_icon_get((bContext*)C, id, 0);
|
if(BLI_strcasestr(id->name+2, str)) {
|
||||||
|
iconid= ui_id_icon_get((bContext*)C, id, 0);
|
||||||
|
|
||||||
if(!uiSearchItemAdd(items, id->name+2, id, iconid))
|
if(!uiSearchItemAdd(items, id->name+2, id, iconid))
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1937,8 +1937,12 @@ void RNA_property_pointer_set(PointerRNA *ptr, PropertyRNA *prop, PointerRNA ptr
|
|||||||
else {
|
else {
|
||||||
PointerPropertyRNA *pprop= (PointerPropertyRNA*)prop;
|
PointerPropertyRNA *pprop= (PointerPropertyRNA*)prop;
|
||||||
|
|
||||||
if(pprop->set && !((prop->flag & PROP_NEVER_NULL) && ptr_value.data == NULL))
|
if( pprop->set &&
|
||||||
|
!((prop->flag & PROP_NEVER_NULL) && ptr_value.data == NULL) &&
|
||||||
|
!((prop->flag & PROP_ID_SELF_CHECK) && ptr->id.data == ptr_value.id.data)
|
||||||
|
) {
|
||||||
pprop->set(ptr, ptr_value);
|
pprop->set(ptr, ptr_value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -886,6 +886,9 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, v
|
|||||||
} else if((flag & PROP_NEVER_NULL) && value == Py_None) {
|
} else if((flag & PROP_NEVER_NULL) && value == Py_None) {
|
||||||
PyErr_Format(PyExc_TypeError, "%.200s does not support a 'None' assignment %.200s type", error_prefix, RNA_struct_identifier(ptype));
|
PyErr_Format(PyExc_TypeError, "%.200s does not support a 'None' assignment %.200s type", error_prefix, RNA_struct_identifier(ptype));
|
||||||
return -1;
|
return -1;
|
||||||
|
} else if(value != Py_None && ((flag & PROP_ID_SELF_CHECK) && ptr->id.data == ((BPy_StructRNA*)value)->ptr.id.data)) {
|
||||||
|
PyErr_Format(PyExc_TypeError, "%.200s ID type does not support assignment to its self", error_prefix);
|
||||||
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
BPy_StructRNA *param= (BPy_StructRNA*)value;
|
BPy_StructRNA *param= (BPy_StructRNA*)value;
|
||||||
int raise_error= FALSE;
|
int raise_error= FALSE;
|
||||||
|
Loading…
Reference in New Issue
Block a user