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;


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to