2.5
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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user