[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27072] trunk/blender/source/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

Campbell Barton ideasman42 at gmail.com
Mon Feb 22 09:27:46 CET 2010


Revision: 27072
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27072
Author:   campbellbarton
Date:     2010-02-22 09:27:45 +0100 (Mon, 22 Feb 2010)

Log Message:
-----------
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

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/makesrna/intern/rna_access.c
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c	2010-02-22 06:05:35 UTC (rev 27071)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c	2010-02-22 08:27:45 UTC (rev 27072)
@@ -157,16 +157,19 @@
 {
 	TemplateID *template= (TemplateID*)arg_template;
 	ListBase *lb= template->idlb;
-	ID *id;
+	ID *id, *id_from= template->ptr.id.data;
 	int iconid;
+	int flag= RNA_property_flag(template->prop);
 
 	/* ID listbase */
 	for(id= lb->first; id; id= id->next) {
-		if(BLI_strcasestr(id->name+2, str)) {
-			iconid= ui_id_icon_get((bContext*)C, id, 0);
+		if(!((flag & PROP_ID_SELF_CHECK) && id == id_from)) {
+			if(BLI_strcasestr(id->name+2, str)) {
+				iconid= ui_id_icon_get((bContext*)C, id, 0);
 
-			if(!uiSearchItemAdd(items, id->name+2, id, iconid))
-				break;
+				if(!uiSearchItemAdd(items, id->name+2, id, iconid))
+					break;
+			}
 		}
 	}
 }

Modified: trunk/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_access.c	2010-02-22 06:05:35 UTC (rev 27071)
+++ trunk/blender/source/blender/makesrna/intern/rna_access.c	2010-02-22 08:27:45 UTC (rev 27072)
@@ -1937,8 +1937,12 @@
 	else {
 		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);
+		}
 	}
 }
 

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2010-02-22 06:05:35 UTC (rev 27071)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2010-02-22 08:27:45 UTC (rev 27072)
@@ -886,6 +886,9 @@
 			} 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));
 				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 {
 				BPy_StructRNA *param= (BPy_StructRNA*)value;
 				int raise_error= FALSE;





More information about the Bf-blender-cvs mailing list