diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 44f80d54666..9b7b23f1026 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -737,7 +737,6 @@ static void copy_object__forwardModifierLinks(void *userData, Object *ob, /* after copying objects, copied data should get new pointers */ static void copy_object_set_idnew(bContext *C, int dupflag) { - Object *ob; Material *ma, *mao; ID *id; #if 0 // XXX old animation system diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index a4c9942833e..6849cefbbd9 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -976,7 +976,7 @@ static int track_set_exec(bContext *C, wmOperator *op) } CTX_DATA_END; } - DAG_scene_sort(CTX_data_scene(C)); + DAG_scene_sort(scene); ED_anim_dag_flush_update(C); return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index d2d4b7ac2c4..339ba55bfd1 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -2489,8 +2489,8 @@ static int find_next_prev_edit(Scene *scene, int cfra, int side) return best_seq ? best_seq->startdisp : cfra; } -static int next_prev_edit_internal(Scene *scene, int side) { - Editing *ed= seq_give_editing(scene, FALSE); +static int next_prev_edit_internal(Scene *scene, int side) +{ int change=0; int cfra = CFRA; int nfra= find_next_prev_edit(scene, cfra, side); diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index dc7f6947f38..d0c70a9ee96 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -971,28 +971,36 @@ int bpy_context_get(bContext *C, const char *member, bContextDataResult *result) CTX_data_pointer_set(result, ptr->id.data, ptr->type, ptr->data); done= 1; } - else if (PyList_Check(item)) { - int len= PyList_Size(item); - int i; - for(i = 0; i < len; i++) { - PyObject *list_item = PyList_GET_ITEM(item, i); // XXX check type - - if(BPy_StructRNA_Check(list_item)) { - /* - CollectionPointerLink *link= MEM_callocN(sizeof(CollectionPointerLink), "bpy_context_get"); - link->ptr= ((BPy_StructRNA *)item)->ptr; - BLI_addtail(&result->list, link); - */ - ptr= &(((BPy_StructRNA *)list_item)->ptr); - CTX_data_list_add(result, ptr->id.data, ptr->type, ptr->data); - } - else { - printf("List item not a valid type\n"); - } - + else if (PySequence_Check(item)) { + PyObject *seq_fast= PySequence_Fast(item, "bpy_context_get sequence conversion"); + if (seq_fast==NULL) { + PyErr_Print(); + PyErr_Clear(); } + else { + int len= PySequence_Fast_GET_SIZE(seq_fast); + int i; + for(i = 0; i < len; i++) { + PyObject *list_item= PySequence_Fast_GET_ITEM(seq_fast, i); - done= 1; + if(BPy_StructRNA_Check(list_item)) { + /* + CollectionPointerLink *link= MEM_callocN(sizeof(CollectionPointerLink), "bpy_context_get"); + link->ptr= ((BPy_StructRNA *)item)->ptr; + BLI_addtail(&result->list, link); + */ + ptr= &(((BPy_StructRNA *)list_item)->ptr); + CTX_data_list_add(result, ptr->id.data, ptr->type, ptr->data); + } + else { + printf("List item not a valid type\n"); + } + + } + Py_DECREF(seq_fast); + + done= 1; + } } if(done==0) { diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index b067d30e36e..0d338cd4631 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -1124,11 +1124,24 @@ static int pyrna_prop_contains(BPy_PropertyRNA * self, PyObject *value) return 0; } +static PyObject *pyrna_prop_item(BPy_PropertyRNA * self, Py_ssize_t index) +{ + /* reuse subscript functions */ + if (RNA_property_type(self->prop) == PROP_COLLECTION) { + return prop_subscript_collection_int(self, index); + } else if (RNA_property_array_check(&self->ptr, self->prop)) { + return prop_subscript_array_int(self, index); + } + + PyErr_SetString(PyExc_TypeError, "rna type is not an array or a collection"); + return NULL; +} + static PySequenceMethods pyrna_prop_as_sequence = { NULL, /* Cant set the len otherwise it can evaluate as false */ NULL, /* sq_concat */ NULL, /* sq_repeat */ - NULL, /* sq_item */ + (ssizeargfunc)pyrna_prop_item, /* sq_item */ /* Only set this so PySequence_Check() returns True */ NULL, /* sq_slice */ NULL, /* sq_ass_item */ NULL, /* sq_ass_slice */