From 55f7a9638ebcd2dfb78394cf396f2edac926baaf Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Wed, 12 Mar 2014 20:00:29 -0400 Subject: Changed the way uitask is dispatched on GTK+ to make event handling not a CPU hog. --- gtkcalls_unix.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'gtkcalls_unix.go') diff --git a/gtkcalls_unix.go b/gtkcalls_unix.go index 5a1a1ae..811287b 100644 --- a/gtkcalls_unix.go +++ b/gtkcalls_unix.go @@ -24,12 +24,14 @@ func gtk_init() bool { return fromgbool(C.gtk_init_check((*C.int)(nil), (***C.char)(nil))) } -// the garbage collector has been found to eat my callback functions; this will stop it -var callbackstore = make([]*func() bool, 0, 50) +// see our_idle_callback in callbacks_unix.go for details +type gtkIdleOp struct { + what func() + done chan struct{} +} -func gdk_threads_add_idle(what func() bool) { - callbackstore = append(callbackstore, &what) - C.gdk_threads_add_idle(callbacks["idle"], C.gpointer(unsafe.Pointer(&what))) +func gdk_threads_add_idle(idleop *gtkIdleOp) { + C.gdk_threads_add_idle(callbacks["idle"], C.gpointer(unsafe.Pointer(idleop))) } func gtk_main() { @@ -45,6 +47,9 @@ func gtk_window_new() *gtkWidget { return fromgtkwidget(C.gtk_window_new(0)) } +// the garbage collector has been found to eat my callback functions; this will stop it +var callbackstore = make([]*func() bool, 0, 50) + func g_signal_connect(obj *gtkWidget, sig string, callback func() bool) { callbackstore = append(callbackstore, &callback) ccallback := callbacks[sig] -- cgit v1.2.3