diff options
author | Stephen Swaney <sswaney@centurytel.net> | 2007-01-31 06:12:26 +0300 |
---|---|---|
committer | Stephen Swaney <sswaney@centurytel.net> | 2007-01-31 06:12:26 +0300 |
commit | f5a48dfd31d8722f7a68199dd59d3a7e45f6d3ea (patch) | |
tree | ad9200f7ca3f96b4ef8f444d108ac60ab2b7e9de /source/blender/python/api2_2x/Window.c | |
parent | 9cf602b9494857d98aec2c045492377005cdcf6b (diff) |
Bugfix for #5000
Setup for Armature weak ref list was missing from some places where
we execute py code. This confused the interpreter and gave random
attribute/tuple parse errors.
Changed name of weak ref list to "__arm_weakrefs" to avoid name
collision with user variables.
Diffstat (limited to 'source/blender/python/api2_2x/Window.c')
-rw-r--r-- | source/blender/python/api2_2x/Window.c | 65 |
1 files changed, 41 insertions, 24 deletions
diff --git a/source/blender/python/api2_2x/Window.c b/source/blender/python/api2_2x/Window.c index cf1c6e1688f..1fcc252f581 100644 --- a/source/blender/python/api2_2x/Window.c +++ b/source/blender/python/api2_2x/Window.c @@ -884,18 +884,42 @@ static PyObject *M_Window_GetPerspMatrix( PyObject * self ) return perspmat; } + +/* update_armature_weakrefs() + * helper function used in M_Window_EditMode. + * rebuilds list of Armature weakrefs in __main__ + */ + +static int update_armature_weakrefs() +{ + /* stuff for armature weak refs */ + char *list_name = ARM_WEAKREF_LIST_NAME; + PyObject *maindict = NULL, *armlist = NULL; + PyObject *pyarmature = NULL; + int x; + + maindict= PyModule_GetDict(PyImport_AddModule( "__main__")); + armlist = PyDict_GetItemString(maindict, list_name); + if( !armlist){ + printf("Oops - update_armature_weakrefs()\n"); + return 0; + } + + for (x = 0; x < PySequence_Size(armlist); x++){ + pyarmature = PyWeakref_GetObject(PySequence_GetItem( armlist, x)); + if (pyarmature != Py_None) + Armature_RebuildEditbones(pyarmature); + } + return 1; +} + + static PyObject *M_Window_EditMode( PyObject * self, PyObject * args ) { short status = -1; char *undo_str = "From script"; int undo_str_len = 11; int do_undo = 1; -#if 0 -/* bug 5000 */ - PyObject *maindict = NULL, *armlist = NULL; - PyObject *pyarmature = NULL; - int x; -#endif if( !PyArg_ParseTuple( args, "|hs#i", &status, &undo_str, &undo_str_len, &do_undo ) ) @@ -905,17 +929,14 @@ static PyObject *M_Window_EditMode( PyObject * self, PyObject * args ) if( status >= 0 ) { if( status ) { if( !G.obedit ){ -#if 0 -/* bug 5000 */ + //update armatures - maindict= PyModule_GetDict(PyImport_AddModule( "__main__")); - armlist = PyDict_GetItemString(maindict, "armatures"); - for (x = 0; x < PySequence_Size(armlist); x++){ - pyarmature = PyWeakref_GetObject(PySequence_GetItem( armlist, x)); - if (pyarmature != Py_None) - Armature_RebuildEditbones(pyarmature); + if(! update_armature_weakrefs()){ + return EXPP_ReturnPyObjError( + PyExc_RuntimeError, + "internal error - update_armature_weakrefs"); } -#endif + //enter editmode enter_editmode(0); } @@ -925,17 +946,13 @@ static PyObject *M_Window_EditMode( PyObject * self, PyObject * args ) BIF_undo_push( undo_str ); /* This checks user undo settings */ exit_editmode( EM_FREEDATA ); -#if 0 -/* bug 5000 */ //update armatures - maindict= PyModule_GetDict(PyImport_AddModule( "__main__")); - armlist = PyDict_GetItemString(maindict, "armatures"); - for (x = 0; x < PySequence_Size(armlist); x++){ - pyarmature = PyWeakref_GetObject(PySequence_GetItem( armlist, x)); - if (pyarmature != Py_None) - Armature_RebuildBones(pyarmature); + if(! update_armature_weakrefs()){ + return EXPP_ReturnPyObjError( + PyExc_RuntimeError, + "internal error - update_armature_weakrefs"); } -#endif + } } |