changeset 935:114729f5aedc

Needed to retain NSStrings in the tree view on Mac to prevent crashes. These retains also require us to release them during delete and clear.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 26 Apr 2011 10:45:21 +0000
parents 13384e89964c
children 4be0c9f963f8
files mac/dw.m
diffstat 1 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mac/dw.m	Tue Apr 26 05:51:19 2011 +0000
+++ b/mac/dw.m	Tue Apr 26 10:45:21 2011 +0000
@@ -1545,10 +1545,17 @@
             {
                 if(item == pnt)
                 {
+                    NSString *oldstr = [item pointerAtIndex:1];
+                    [oldstr release];
                     _free_tree_recurse(children, NULL);
+                    [node removeObjectAtIndex:z];
+                    count = (int)[node count];
+                    z--;
                 }
-                else
+                else if(item == NULL)
                 {
+                    NSString *oldstr = [pnt pointerAtIndex:1];
+                    [oldstr release];
                     _free_tree_recurse(children, item);
                 }
             }
@@ -4884,7 +4891,7 @@
     int _locked_by_me = FALSE;
     DW_MUTEX_LOCK;
     DWTree *tree = handle;
-    NSString *nstr = [NSString stringWithUTF8String:title];
+    NSString *nstr = [[NSString stringWithUTF8String:title] retain];
     NSPointerArray *treenode = [NSPointerArray pointerArrayWithWeakObjects];
     [treenode addPointer:icon];
     [treenode addPointer:nstr];
@@ -4961,8 +4968,10 @@
     NSPointerArray *array = (NSPointerArray *)item;
     if(title)
     {
-        NSString *nstr = [NSString stringWithUTF8String:title];
+        NSString *oldstr = [array pointerAtIndex:1];
+        NSString *nstr = [[NSString stringWithUTF8String:title] retain];
         [array replacePointerAtIndex:1 withPointer:nstr];
+        [oldstr release];
     }
     if(icon)
     {