Mercurial > dwindows
changeset 1874:71c8a45b2a35
Fixes for Mac code and allocate and free duplicates of title strings.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Thu, 08 Aug 2013 23:53:38 +0000 |
parents | 15d24b5300ec |
children | fb137f7f91e4 |
files | mac/dw.m |
diffstat | 1 files changed, 47 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/mac/dw.m Thu Aug 08 20:28:57 2013 +0000 +++ b/mac/dw.m Thu Aug 08 23:53:38 2013 +0000 @@ -399,7 +399,7 @@ case 12: { int (* API treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = (int (* API)(HWND, HTREEITEM, char *, void *, void *))handler->signalfunction; - char *text = (char *)event; + char *text = NULL; void *user = NULL; id item = nil; @@ -412,10 +412,6 @@ { text = strdup([nstr UTF8String]); } - else - { - text = NULL; - } NSValue *value = [item objectAtIndex:2]; if(value && [value isKindOfClass:[NSValue class]]) @@ -429,6 +425,13 @@ } return result; } + else if(event) + { + void **params = (void **)event; + + text = params[0]; + user = params[1]; + } return treeselectfunc(handler->window, item, text, handler->data, user); } @@ -1983,6 +1986,7 @@ { int z, start, end; int count = (int)[tvcols count]; + void *oldtitle; start = (count * row); end = start + count; @@ -1991,15 +1995,28 @@ { [data removeObjectAtIndex:start]; } + oldtitle = [titles pointerAtIndex:row]; [titles removePointerAtIndex:row]; [rowdatas removePointerAtIndex:row]; if(lastAddPoint > 0 && lastAddPoint > row) { lastAddPoint--; } - } -} --(void)setRow:(int)row title:(void *)input { if(titles && input) { [titles replacePointerAtIndex:row withPointer:input]; } } + if(oldtitle) + free(oldtitle); + } +} +-(void)setRow:(int)row title:(void *)input +{ + if(titles && input) + { + void *oldtitle = [titles pointerAtIndex:row]; + void *newtitle = input ? (void *)strdup((char *)input) : NULL; + [titles replacePointerAtIndex:row withPointer:newtitle]; + if(oldtitle) + free(oldtitle); + } +} -(void)setRowData:(int)row title:(void *)input { if(rowdatas && input) { [rowdatas replacePointerAtIndex:row withPointer:input]; } } -(void *)getRowTitle:(int)row { if(titles && row > -1) { return [titles pointerAtIndex:row]; } return NULL; } -(void *)getRowData:(int)row { if(rowdatas && row > -1) { return [rowdatas pointerAtIndex:row]; } return NULL; } @@ -2008,7 +2025,22 @@ -(int)lastAddPoint { return lastAddPoint; } -(int)lastQueryPoint { return lastQueryPoint; } -(void)setLastQueryPoint:(int)input { lastQueryPoint = input; } --(void)clear { if(data) { [data removeAllObjects]; while([titles count]) { [titles removePointerAtIndex:0]; } } lastAddPoint = 0; } +-(void)clear +{ + if(data) + { + [data removeAllObjects]; + while([titles count]) + { + void *oldtitle = [titles pointerAtIndex:0]; + [titles removePointerAtIndex:0]; + [rowdatas removePointerAtIndex:0]; + if(oldtitle) + free(oldtitle); + } + } + lastAddPoint = 0; +} -(void)setup { SEL swopa = NSSelectorFromString(@"pointerArrayWithWeakObjects"); @@ -2194,8 +2226,13 @@ } -(void)selectionChanged:(id)sender { + void *params[2]; + + params[0] = (void *)[self getRowTitle:(int)[self selectedRow]]; + params[1] = (void *)[self getRowData:(int)[self selectedRow]]; + /* Handler for container class */ - _event_handler(self, (NSEvent *)[self getRowTitle:(int)[self selectedRow]], 12); + _event_handler(self, (NSEvent *)params, 12); /* Handler for listbox class */ _event_handler(self, DW_INT_TO_POINTER((int)[self selectedRow]), 11); }