# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1303814721 0 # Node ID 114729f5aedc0180f7d4bd47be88d28bef5adf26 # Parent 13384e89964c230691fb64fff9e6d231b61cd335 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. diff -r 13384e89964c -r 114729f5aedc mac/dw.m --- 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) {