diff options
author | Ton Roosendaal <ton@blender.org> | 2005-10-21 01:02:04 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2005-10-21 01:02:04 +0400 |
commit | 00496cd3660b4358f91fa09adc6fefa224b894c2 (patch) | |
tree | 6d86b7dde2680df624023925a2bceedd26505061 /source | |
parent | 968b3e71013e5afa1235977ba10f81e7e2a702a6 (diff) |
Another memory error found, when deleting bones in editmode, it didn't
correctly free constraints.
To ensure the UI not to show any deleted data, after leaving editmode it
now also redraws nla, action and ipo.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/armature.c | 4 | ||||
-rw-r--r-- | source/blender/src/editobject.c | 15 |
2 files changed, 11 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 4d5c1c82bf2..a15cfc93092 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -958,13 +958,13 @@ void armature_rebuild_pose(Object *ob, bArmature *arm) for(bone= arm->bonebase.first; bone; bone= bone->next) { counter= rebuild_pose_bone(pose, bone, NULL, counter); } - /* sort channels on dependency order, so we can walk the channel list */ /* and a check for garbage */ for(pchan= pose->chanbase.first; pchan; pchan= next) { next= pchan->next; if(pchan->bone==NULL) { - BLI_freelinkN(&pose->chanbase, pchan); // constraints? + free_constraints(&pchan->constraints); + BLI_freelinkN(&pose->chanbase, pchan); } } // printf("rebuild pose %s, %d bones\n", ob->id.name, counter); diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c index 1b8e49e3582..81274548d9f 100644 --- a/source/blender/src/editobject.c +++ b/source/blender/src/editobject.c @@ -1573,13 +1573,16 @@ void exit_editmode(int freedata) /* freedata==0 at render, 1= freedata, 2= do un if(freedata) { setcursor_space(SPACE_VIEW3D, CURSOR_STD); - - countall(); - allqueue(REDRAWVIEW3D, 1); - allqueue(REDRAWBUTSEDIT, 0); - allqueue(REDRAWBUTSLOGIC, 0); - allqueue(REDRAWOOPS, 0); } + + countall(); + allqueue(REDRAWVIEW3D, 1); + allqueue(REDRAWBUTSALL, 0); + allqueue(REDRAWACTION, 0); + allqueue(REDRAWNLA, 0); + allqueue(REDRAWIPO, 0); + allqueue(REDRAWOOPS, 0); + scrarea_queue_headredraw(curarea); if(G.obedit==NULL && freedata==2) |