summaryrefslogtreecommitdiff
path: root/cocoa/schedule.m
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2011-01-12 20:21:17 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2011-01-12 20:21:17 +0000
commitb58dcc351f3f7ec32ecb0553436ff9ee76e52551 (patch)
treefed57c711a544fb8272423e2645c5bbf2def25d7 /cocoa/schedule.m
parent8c09af55681ff4d4e40eba62fca0c219443a2fc7 (diff)
downloadnetsurf-b58dcc351f3f7ec32ecb0553436ff9ee76e52551.tar.gz
netsurf-b58dcc351f3f7ec32ecb0553436ff9ee76e52551.tar.bz2
Cocoa front end (credit: Sven Weidauer)
svn path=/trunk/netsurf/; revision=11292
Diffstat (limited to 'cocoa/schedule.m')
-rw-r--r--cocoa/schedule.m91
1 files changed, 91 insertions, 0 deletions
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 <sven.weidauer@gmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#import "desktop/browser.h"
+
+#import <Cocoa/Cocoa.h>
+
+@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];
+}
+