diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py index 2640288b3c5..c8153ce9b74 100644 --- a/release/scripts/modules/bpy_types.py +++ b/release/scripts/modules/bpy_types.py @@ -29,11 +29,14 @@ class Context(StructRNA): __slots__ = () def copy(self): + import types new_context = {} generic_keys = StructRNA.__dict__.keys() for item in dir(self): if item not in generic_keys: - new_context[item] = getattr(self, item) + value = getattr(self, item) + if type(value) != types.BuiltinMethodType: + new_context[item] = getattr(self, item) return new_context diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c index 0d532a61ce7..4e1a0abc517 100644 --- a/source/blender/python/intern/bpy.c +++ b/source/blender/python/intern/bpy.c @@ -141,6 +141,7 @@ static void bpy_import_test(char *modname) void BPy_init_modules( void ) { extern BPy_StructRNA *bpy_context_module; + PointerRNA ctx_ptr; PyObject *mod; /* Needs to be first since this dir is needed for future modules */ @@ -181,9 +182,12 @@ void BPy_init_modules( void ) PyModule_AddObject( mod, "app", BPY_app_struct() ); /* bpy context */ - bpy_context_module= ( BPy_StructRNA * ) PyObject_NEW( BPy_StructRNA, &pyrna_struct_Type ); - RNA_pointer_create(NULL, &RNA_Context, BPy_GetContext(), &bpy_context_module->ptr); - bpy_context_module->freeptr= 0; + RNA_pointer_create(NULL, &RNA_Context, BPy_GetContext(), &ctx_ptr); + bpy_context_module= (BPy_StructRNA *)pyrna_struct_CreatePyObject(&ctx_ptr); + /* odd that this is needed, 1 ref on creation and another for the module + * but without we get a crash on exit */ + Py_INCREF(bpy_context_module); + PyModule_AddObject(mod, "context", (PyObject *)bpy_context_module); /* utility func's that have nowhere else to go */