diff options
author | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2006-03-09 20:14:13 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2006-03-09 20:14:13 +0000 |
commit | 4306d74fafff062de2c6749bc369483394dae20e (patch) | |
tree | 6311b947af9517868a3715b8fa796fbf46436f23 /gtk/gtk_schedule.c | |
parent | a197ee3b280f270cf4c0b17818d72d702249dbcd (diff) | |
download | netsurf-4306d74fafff062de2c6749bc369483394dae20e.tar.gz netsurf-4306d74fafff062de2c6749bc369483394dae20e.tar.bz2 |
[project @ 2006-03-09 20:14:13 by dsilvers]
Added schedule support to the GTK port
svn path=/import/netsurf/; revision=2116
Diffstat (limited to 'gtk/gtk_schedule.c')
-rw-r--r-- | gtk/gtk_schedule.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/gtk/gtk_schedule.c b/gtk/gtk_schedule.c new file mode 100644 index 000000000..61c46e5bc --- /dev/null +++ b/gtk/gtk_schedule.c @@ -0,0 +1,73 @@ +/* + * This file is part of NetSurf, http://netsurf.sourceforge.net/ + * Licensed under the GNU General Public License, + * http://www.opensource.org/licenses/gpl-license + * Copyright 2006 Daniel Silverstone <dsilvers@digital-scurf.org> + */ + +#include <glib.h> +#include <stdlib.h> +#include <stdio.h> + +#include "netsurf/desktop/browser.h" + +typedef struct { + void (*callback)(void *); + void *p; + int die; +} _nsgtkcallback; + +static GList *callbacks; + +static gboolean ns_generic_gtk_callback(gpointer data) +{ + _nsgtkcallback *cb = (_nsgtkcallback*)(data); + if(cb->die) { + /* We got removed before we got fired off */ + fprintf(stderr, "Callback %p(%p) died before run\n", + cb->callback, cb->p); + free(cb); + return FALSE; + } + fprintf(stderr, "Calling %p(%p)\n", cb->callback, cb->p); + cb->callback(cb->p); + callbacks = g_list_remove(callbacks, cb); + free(cb); + return FALSE; +} + +void schedule_remove(void (*callback)(void *p), void *p) +{ + _nsgtkcallback *cb; + GList *l; + l = callbacks; + while(l) { + cb = (_nsgtkcallback*)(l->data); + if(cb->callback == callback && cb->p == p) { + l = callbacks = g_list_remove(callbacks, cb); + cb->die = 1; + fprintf(stderr, "Callback %p(%p) scheduled for removal\n", + cb->callback, cb->p); + + } else + l = g_list_next(l); + } +} + +void schedule(int t, void (*callback)(void *p), void *p) +{ + _nsgtkcallback *cb = (_nsgtkcallback*)malloc(sizeof(_nsgtkcallback)); + schedule_remove(callback, p); + cb->callback = callback; + cb->p = p; + cb->die = 0; + callbacks = g_list_prepend(callbacks, cb); + g_timeout_add(t * 10, ns_generic_gtk_callback, cb); + fprintf(stderr, "Scheduled a callback to %p(%p) for %d CS\n", callback, p, t); +} + +void schedule_run(void) +{ + /* Nothing to do, the running is done via the gtk mainloop of joy */ +} + |