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);