[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28285] trunk/blender/source/blender/ python/intern/bpy_rna.c: setting array slices wasnt running rna update

Campbell Barton ideasman42 at gmail.com
Mon Apr 19 15:37:44 CEST 2010


Revision: 28285
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28285
Author:   campbellbarton
Date:     2010-04-19 15:37:44 +0200 (Mon, 19 Apr 2010)

Log Message:
-----------
setting array slices wasnt running rna update
eg:
 scene.visible_layers[:] = obj.layers

Modified Paths:
--------------
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2010-04-19 13:30:13 UTC (rev 28284)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2010-04-19 13:37:44 UTC (rev 28285)
@@ -1452,43 +1452,50 @@
 static int pyrna_prop_array_ass_subscript( BPy_PropertyRNA *self, PyObject *key, PyObject *value )
 {
 	/* char *keyname = NULL; */ /* not supported yet */
-	
+	int ret= -1;
+
 	if (!RNA_property_editable_flag(&self->ptr, self->prop)) {
 		PyErr_Format(PyExc_AttributeError, "bpy_prop_collection: attribute \"%.200s\" from \"%.200s\" is read-only", RNA_property_identifier(self->prop), RNA_struct_identifier(self->ptr.type) );
-		return -1;
+		ret= -1;
 	}
 
-	if (PyIndex_Check(key)) {
+	else if (PyIndex_Check(key)) {
 		Py_ssize_t i = PyNumber_AsSsize_t(key, PyExc_IndexError);
-		if (i == -1 && PyErr_Occurred())
-			return -1;
-
-		return prop_subscript_ass_array_int(self, i, value);
+		if (i == -1 && PyErr_Occurred()) {
+			ret= -1;
+		}
+		else {
+			ret= prop_subscript_ass_array_int(self, i, value);
+		}
 	}
 	else if (PySlice_Check(key)) {
 		int len= RNA_property_array_length(&self->ptr, self->prop);
 		Py_ssize_t start, stop, step, slicelength;
 
-		if (PySlice_GetIndicesEx((PySliceObject*)key, len, &start, &stop, &step, &slicelength) < 0)
-			return -1;
-
-		if (slicelength <= 0) {
-			return 0;
+		if (PySlice_GetIndicesEx((PySliceObject*)key, len, &start, &stop, &step, &slicelength) < 0) {
+			ret= -1;
 		}
+		else if (slicelength <= 0) {
+			ret= 0; /* do nothing */
+		}
 		else if (step == 1) {
-			return prop_subscript_ass_array_slice(&self->ptr, self->prop, start, stop, len, value);
+			ret= prop_subscript_ass_array_slice(&self->ptr, self->prop, start, stop, len, value);
 		}
 		else {
 			PyErr_SetString(PyExc_TypeError, "slice steps not supported with rna");
-			return -1;
+			ret= -1;
 		}
 	}
 	else {
 		PyErr_SetString(PyExc_AttributeError, "invalid key, key must be an int");
-		return -1;
+		ret= -1;
 	}
 
-	RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
+	if(ret != -1) {
+		RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
+	}
+
+	return ret;
 }
 
 /* for slice only */





More information about the Bf-blender-cvs mailing list