Added freeing functions in outliner space, this makes blender quit
without memory free errors in my test .b.blends.

Note: I'll move current rna viewer to new SpaceData editor, then I
can bring back original outliner stuff. Proposed menu name is
"Data Viewer". Probably better not not expose name 'rna' in UI?
This commit is contained in:
Ton Roosendaal
2008-12-14 10:08:00 +00:00
parent 93f3eaafea
commit 7e6c5b912d
3 changed files with 102 additions and 1 deletions

View File

@@ -4510,8 +4510,17 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID
allocname= dataname(GS(id->name));
/* read all data */
while(bhead && bhead->code==DATA) {
void *data= read_struct(fd, bhead, allocname);
void *data;
/* XXX BAD DEBUGGING OPTION TO GIVE NAMES */
short *sp= fd->filesdna->structs[bhead->SDNAnr];
char *allocname = fd->filesdna->types[ sp[0] ];
char *tmp= malloc(100);
strcpy(tmp, allocname);
data= read_struct(fd, bhead, tmp);
if (data) {
oldnewmap_insert(fd->datamap, bhead->old, data, 0);

View File

@@ -33,6 +33,67 @@
struct wmWindowManager;
struct TreeStoreElem;
typedef struct TreeElement {
struct TreeElement *next, *prev, *parent;
ListBase subtree;
float xs, ys; // do selection
int store_index; // offset in tree store
short flag, index; // flag for non-saved stuff, index for data arrays
short idcode; // from TreeStore id
short xend; // width of item display, for select
char *name;
void *directdata; // Armature Bones, Base, Sequence, Strip...
} TreeElement;
/* TreeElement->flag */
#define TE_ACTIVE 1
#define TE_ICONROW 2
/* TreeStoreElem types */
#define TSE_NLA 1
#define TSE_NLA_ACTION 2
#define TSE_DEFGROUP_BASE 3
#define TSE_DEFGROUP 4
#define TSE_BONE 5
#define TSE_EBONE 6
#define TSE_CONSTRAINT_BASE 7
#define TSE_CONSTRAINT 8
#define TSE_MODIFIER_BASE 9
#define TSE_MODIFIER 10
#define TSE_LINKED_OB 11
#define TSE_SCRIPT_BASE 12
#define TSE_POSE_BASE 13
#define TSE_POSE_CHANNEL 14
/*#ifdef WITH_VERSE*/
#define TSE_VERSE_SESSION 15
#define TSE_VERSE_OBJ_NODE 16
#define TSE_VERSE_GEOM_NODE 17
/*#endif*/
#define TSE_PROXY 18
#define TSE_R_LAYER_BASE 19
#define TSE_R_LAYER 20
#define TSE_R_PASS 21
#define TSE_LINKED_MAT 22
/* NOTE, is used for light group */
#define TSE_LINKED_LAMP 23
#define TSE_POSEGRP_BASE 24
#define TSE_POSEGRP 25
#define TSE_SEQUENCE 26
#define TSE_SEQ_STRIP 27
#define TSE_SEQUENCE_DUP 28
/* outliner search flags */
#define OL_FIND 0
#define OL_FIND_CASE 1
#define OL_FIND_COMPLETE 2
#define OL_FIND_COMPLETE_CASE 3
/* button events */
#define OL_NAMEBUTTON 1
/* outliner_ops.c */
void outliner_operatortypes(void);
void outliner_keymap(struct wmWindowManager *wm);

View File

@@ -492,15 +492,46 @@ static SpaceLink *outliner_new(void)
return (SpaceLink*)soutliner;
}
static void free_oops(Oops *oops) /* also oops itself */
{
BLI_freelistN(&oops->link);
MEM_freeN(oops);
}
static void outliner_free_tree(ListBase *lb)
{
while(lb->first) {
TreeElement *te= lb->first;
outliner_free_tree(&te->subtree);
BLI_remlink(lb, te);
MEM_freeN(te);
}
}
/* not spacelink itself */
static void outliner_free(SpaceLink *sl)
{
SpaceOops *soutliner= (SpaceOops*)sl;
Oops *oops;
if(soutliner->rnapath) {
MEM_freeN(soutliner->rnapath);
soutliner->rnapath= NULL;
}
while( (oops= soutliner->oops.first) ) {
BLI_remlink(&soutliner->oops, oops);
free_oops(oops);
}
outliner_free_tree(&soutliner->tree);
if(soutliner->treestore) {
if(soutliner->treestore->data) MEM_freeN(soutliner->treestore->data);
MEM_freeN(soutliner->treestore);
}
}
/* spacetype; init callback */