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
     {