diff options
author | Ton Roosendaal <ton@blender.org> | 2008-12-14 13:08:00 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2008-12-14 13:08:00 +0300 |
commit | 7e6c5b912de50e2fa4607aabcd8dac0b8999fccc (patch) | |
tree | 1a9635937edf487247273642b915378b3547b8f5 /source/blender/editors | |
parent | 93f3eaafea1a3099b9e067ad6803aa57139f9ee1 (diff) |
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?
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/space_outliner/outliner_intern.h | 61 | ||||
-rw-r--r-- | source/blender/editors/space_outliner/space_outliner.c | 31 |
2 files changed, 92 insertions, 0 deletions
diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index dcc81ad5f9d..50c5156f4df 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -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); diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index c687ca17907..b53e5ce427d 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -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 */ |