forked from bartvdbraak/blender
Modified python rna property types (BPy_PropertyRNA), so PySequence_Check() returns true
this means you can do... C = {"selected_editable_objects":bpy.data.objects} ...when defining pythons context, without doing list(bpy.data.objects)
This commit is contained in:
parent
c508e6198a
commit
e14a8635cc
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -971,11 +971,17 @@ 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);
|
||||
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 = PyList_GET_ITEM(item, i); // XXX check type
|
||||
PyObject *list_item= PySequence_Fast_GET_ITEM(seq_fast, i);
|
||||
|
||||
if(BPy_StructRNA_Check(list_item)) {
|
||||
/*
|
||||
@ -991,9 +997,11 @@ int bpy_context_get(bContext *C, const char *member, bContextDataResult *result)
|
||||
}
|
||||
|
||||
}
|
||||
Py_DECREF(seq_fast);
|
||||
|
||||
done= 1;
|
||||
}
|
||||
}
|
||||
|
||||
if(done==0) {
|
||||
if (item) printf("Context '%s' not found\n", member);
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user