[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