diff options
| author | Pietro Gagliardi <[email protected]> | 2014-07-03 10:02:27 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-07-03 10:02:27 -0400 |
| commit | 9eb9aa82c02a0276df38428895bd840ec8caea02 (patch) | |
| tree | 5621f946a9eac5a7c7ee94f4f3be7990f85beb2d /uitask_unix.go | |
| parent | 8a81650b3da7ce00725336df9e03b38e935c5a65 (diff) | |
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.
Diffstat (limited to 'uitask_unix.go')
| -rw-r--r-- | uitask_unix.go | 40 |
1 files changed, 0 insertions, 40 deletions
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 { |
