From 9eb9aa82c02a0276df38428895bd840ec8caea02 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Thu, 3 Jul 2014 10:02:27 -0400 Subject: Removed uitask and made the Window creation functions only callable from the main thread. This si the first part in the real major change, which bans all concurrent use of the API and provides a Post() function for communication. I don't like this, but it's the only way. Untested. --- uitask_unix.go | 40 ---------------------------------------- 1 file changed, 40 deletions(-) (limited to 'uitask_unix.go') diff --git a/uitask_unix.go b/uitask_unix.go index a537e3d..70fddae 100644 --- a/uitask_unix.go +++ b/uitask_unix.go @@ -11,23 +11,6 @@ import ( // #cgo pkg-config: gtk+-3.0 // #include "gtk_unix.h" -// /* unfortunately, there's no way to differentiate between the main thread and other threads; in fact, doing what we do on other platforms is discouraged by the GTK+ devs! -// but I can't avoid this any other way... so we have structures defined on the C side to skirt the garbage collector */ -// struct uitaskParams { -// void *window; /* createWindow */ -// void *control; /* createWindow */ -// gboolean show; /* createWindow */ -// }; -// static struct uitaskParams *mkParams(void) -// { -// /* g_malloc0() will abort on not enough memory */ -// return (struct uitaskParams *) g_malloc0(sizeof (struct uitaskParams)); -// } -// static void freeParams(struct uitaskParams *p) -// { -// g_free(p); -// } -// extern gboolean our_createWindow_callback(gpointer); // /* this is called when we're done */ // static inline gboolean our_quit_callback(gpointer data) // { @@ -41,29 +24,6 @@ import ( // } import "C" -//export our_createWindow_callback -func our_createWindow_callback(what C.gpointer) C.gboolean { - uc := (*C.struct_uitaskParams)(unsafe.Pointer(what)) - w := (*Window)(unsafe.Pointer(uc.window)) - c := *(*Control)(unsafe.Pointer(uc.control)) - s := fromgbool(uc.show) - w.create(c, s) - C.freeParams(uc) - return C.FALSE // remove this idle function; we're finished -} - -func (_uitask) createWindow(w *Window, c Control, s bool) { - uc := C.mkParams() - uc.window = unsafe.Pointer(w) - uc.control = unsafe.Pointer(&c) - uc.show = togbool(s) - gdk_threads_add_idle(C.our_createWindow_callback, unsafe.Pointer(uc)) -} - -func gdk_threads_add_idle(f unsafe.Pointer, what unsafe.Pointer) { - C.gdk_threads_add_idle(C.GCallback(f), C.gpointer(what)) -} - func uiinit() error { err := gtk_init() if err != nil { -- cgit v1.2.3