From 4306d74fafff062de2c6749bc369483394dae20e Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Thu, 9 Mar 2006 20:14:13 +0000 Subject: [project @ 2006-03-09 20:14:13 by dsilvers] Added schedule support to the GTK port svn path=/import/netsurf/; revision=2116 --- gtk/gtk_schedule.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 gtk/gtk_schedule.c (limited to 'gtk/gtk_schedule.c') 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 + */ + +#include +#include +#include + +#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 */ +} + -- cgit v1.2.3