Mercurial > dwindows
comparison mac/dw.m @ 688:b52f1d4a60dd
Fixes for timers not working properly. Includes commented out test container code for threadsafety.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 07 Mar 2011 22:09:49 +0000 |
parents | 5dde8d34bc69 |
children | 4199730e9889 |
comparison
equal
deleted
inserted
replaced
687:5dde8d34bc69 | 688:b52f1d4a60dd |
---|---|
1108 { 16, DW_SIGNAL_TREE_EXPAND } | 1108 { 16, DW_SIGNAL_TREE_EXPAND } |
1109 }; | 1109 }; |
1110 | 1110 |
1111 /* This function adds a signal handler callback into the linked list. | 1111 /* This function adds a signal handler callback into the linked list. |
1112 */ | 1112 */ |
1113 void _new_signal(ULONG message, HWND window, int id, void *signalfunction, void *data) | 1113 void _new_signal(ULONG message, HWND window, int msgid, void *signalfunction, void *data) |
1114 { | 1114 { |
1115 SignalHandler *new = malloc(sizeof(SignalHandler)); | 1115 SignalHandler *new = malloc(sizeof(SignalHandler)); |
1116 | 1116 |
1117 new->message = message; | 1117 new->message = message; |
1118 new->window = window; | 1118 new->window = window; |
1119 new->id = id; | 1119 new->id = msgid; |
1120 new->signalfunction = signalfunction; | 1120 new->signalfunction = signalfunction; |
1121 new->data = data; | 1121 new->data = data; |
1122 new->next = NULL; | 1122 new->next = NULL; |
1123 | 1123 |
1124 if (!Root) | 1124 if (!Root) |
1128 SignalHandler *prev = NULL, *tmp = Root; | 1128 SignalHandler *prev = NULL, *tmp = Root; |
1129 while(tmp) | 1129 while(tmp) |
1130 { | 1130 { |
1131 if(tmp->message == message && | 1131 if(tmp->message == message && |
1132 tmp->window == window && | 1132 tmp->window == window && |
1133 tmp->id == id && | 1133 tmp->id == msgid && |
1134 tmp->signalfunction == signalfunction) | 1134 tmp->signalfunction == signalfunction) |
1135 { | 1135 { |
1136 tmp->data = data; | 1136 tmp->data = data; |
1137 free(new); | 1137 free(new); |
1138 return; | 1138 return; |
2595 DWContainer *cont = handle; | 2595 DWContainer *cont = handle; |
2596 NSString *nstr = [ NSString stringWithUTF8String:text ]; | 2596 NSString *nstr = [ NSString stringWithUTF8String:text ]; |
2597 NSArray *newrow = [NSArray arrayWithObject:nstr]; | 2597 NSArray *newrow = [NSArray arrayWithObject:nstr]; |
2598 | 2598 |
2599 [cont addRow:newrow]; | 2599 [cont addRow:newrow]; |
2600 /*[cont performSelectorOnMainThread:@selector(addRow:) | |
2601 withObject:newrow | |
2602 waitUntilDone:YES];*/ | |
2600 [cont reloadData]; | 2603 [cont reloadData]; |
2601 | 2604 |
2602 [newrow release]; | 2605 [newrow release]; |
2603 } | 2606 } |
2604 } | 2607 } |
5939 } | 5942 } |
5940 | 5943 |
5941 if(sigfunc && !DWTimers[z]) | 5944 if(sigfunc && !DWTimers[z]) |
5942 { | 5945 { |
5943 NSTimeInterval seconds = (double)interval / 1000.0; | 5946 NSTimeInterval seconds = (double)interval / 1000.0; |
5944 NSTimer *thistimer = DWTimers[z] = [NSTimer timerWithTimeInterval:seconds target:DWHandler selector:@selector(runTimer:) userInfo:nil repeats:YES]; | 5947 NSTimer *thistimer = DWTimers[z] = [NSTimer scheduledTimerWithTimeInterval:seconds target:DWHandler selector:@selector(runTimer:) userInfo:nil repeats:YES]; |
5945 _new_signal(0, thistimer, z+1, sigfunc, data); | 5948 _new_signal(0, thistimer, z+1, sigfunc, data); |
5946 return z+1; | 5949 return z+1; |
5947 } | 5950 } |
5948 return 0; | 5951 return 0; |
5949 } | 5952 } |
5963 return; | 5966 return; |
5964 | 5967 |
5965 thistimer = DWTimers[timerid-1]; | 5968 thistimer = DWTimers[timerid-1]; |
5966 DWTimers[timerid-1] = nil; | 5969 DWTimers[timerid-1] = nil; |
5967 | 5970 |
5968 [thistimer release]; | 5971 [thistimer invalidate]; |
5969 | 5972 |
5970 while(tmp) | 5973 while(tmp) |
5971 { | 5974 { |
5972 if(tmp->id == (timerid-1) && tmp->window == thistimer) | 5975 if(tmp->id == timerid && tmp->window == thistimer) |
5973 { | 5976 { |
5974 if(prev) | 5977 if(prev) |
5975 { | 5978 { |
5976 prev->next = tmp->next; | 5979 prev->next = tmp->next; |
5977 free(tmp); | 5980 free(tmp); |