Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2008-12-14 13:08:00 +0300
committerTon Roosendaal <ton@blender.org>2008-12-14 13:08:00 +0300
commit7e6c5b912de50e2fa4607aabcd8dac0b8999fccc (patch)
tree1a9635937edf487247273642b915378b3547b8f5 /source/blender/editors
parent93f3eaafea1a3099b9e067ad6803aa57139f9ee1 (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.h61
-rw-r--r--source/blender/editors/space_outliner/space_outliner.c31
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 */