From b58dcc351f3f7ec32ecb0553436ff9ee76e52551 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Wed, 12 Jan 2011 20:21:17 +0000 Subject: Cocoa front end (credit: Sven Weidauer) svn path=/trunk/netsurf/; revision=11292 --- cocoa/schedule.m | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 cocoa/schedule.m (limited to 'cocoa/schedule.m') diff --git a/cocoa/schedule.m b/cocoa/schedule.m new file mode 100644 index 000000000..b5d5626af --- /dev/null +++ b/cocoa/schedule.m @@ -0,0 +1,91 @@ +/* + * Copyright 2011 Sven Weidauer + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "desktop/browser.h" + +#import + +@interface ScheduledCallback : NSObject { + void (*callback)( void *userData ); + void *userData; +} + +- initWithCallback: (void (*)(void *))cb userData: (void *)ud; +- (void) schedule: (NSTimeInterval) ti; + +@end + +@implementation ScheduledCallback + +- initWithCallback: (void (*)(void *))cb userData: (void *)ud; +{ + callback = cb; + userData = ud; + + return self; +} + +static NSMutableSet *timerSet = nil; + +- (void) schedule: (NSTimeInterval) ti; +{ + if (nil == timerSet) { + timerSet = [[NSMutableSet alloc] init]; + } + + [self performSelector: @selector(timerFired) withObject: nil afterDelay: ti]; + [timerSet addObject: self]; +} + +- (void) timerFired; +{ + if ([timerSet containsObject: self]) { + [timerSet removeObject: self]; + callback( userData ); + } +} + +- (BOOL) isEqual: (id)object +{ + if (object == self) return YES; + if ([object class] != [self class]) return NO; + return ((ScheduledCallback *)object)->callback == callback && ((ScheduledCallback *)object)->userData == userData; +} + +- (NSUInteger) hash; +{ + return (NSUInteger)callback + (NSUInteger)userData; +} + +@end + +/* In platform specific schedule.c. */ +void schedule(int t, void (*callback)(void *p), void *p) +{ + ScheduledCallback *cb = [[ScheduledCallback alloc] initWithCallback: callback userData: p]; + [cb schedule: (NSTimeInterval)t / 100]; + [cb release]; +} + +void schedule_remove(void (*callback)(void *p), void *p) +{ + ScheduledCallback *cb = [[ScheduledCallback alloc] initWithCallback: callback userData: p]; + [timerSet removeObject: cb]; + [cb release]; +} + -- cgit v1.2.3