Mercurial > dwindows
changeset 1100:13ea7575d9e8
Fixed a problem with dw_tree_item_delete() due to earlier tree data storage changes.
Also fixed a problem with dw_tree_insert_after() not inserting at the correct point.
That change required additional bounds checks.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 25 Jul 2011 23:22:04 +0000 |
parents | d1cea9be1436 |
children | d7eafaa054ab |
files | mac/dw.m |
diffstat | 1 files changed, 14 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mac/dw.m Sat Jul 23 05:09:34 2011 +0000 +++ b/mac/dw.m Mon Jul 25 23:22:04 2011 +0000 @@ -1614,29 +1614,34 @@ -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; } @end -/* Dive into the tree showing all nodes */ +/* Dive into the tree freeing all desired child nodes */ void _free_tree_recurse(NSMutableArray *node, NSMutableArray *item) { - if(node && ([node isMemberOfClass:[NSMutableArray class]])) + if(node && ([node isKindOfClass:[NSArray class]])) { int count = (int)[node count]; + NSInteger index = -1; int z; + + if(item) + index = [node indexOfObject:item]; for(z=0;z<count;z++) { NSMutableArray *pnt = [node objectAtIndex:z]; NSMutableArray *children = nil; - if(pnt && [pnt isMemberOfClass:[NSMutableArray class]]) + if(pnt && [pnt isKindOfClass:[NSArray class]]) { children = (NSMutableArray *)[pnt objectAtIndex:3]; } - if(item == pnt) + if(z == index) { _free_tree_recurse(children, NULL); [node removeObjectAtIndex:z]; count = (int)[node count]; + index = -1; z--; } else if(item == NULL) @@ -1790,7 +1795,11 @@ if(after) { NSInteger index = [children indexOfObject:after]; - [children insertObject:item atIndex:index]; + int count = (int)[children count]; + if(index != NSNotFound && (index+1) < count) + [children insertObject:item atIndex:(index+1)]; + else + [children addObject:item]; } else {