diff --git a/redo/dialog_unix.go b/redo/dialog_unix.go new file mode 100644 index 0000000..552f485 --- /dev/null +++ b/redo/dialog_unix.go @@ -0,0 +1,42 @@ +// 19 august 2014 + +package ui + +import ( + "unsafe" +) + +// #include "gtk_unix.h" +// /* because cgo doesn't like ... */ +// GtkWidget *newOpenFileDialog(void) +// { +// return gtk_file_chooser_dialog_new(NULL, /* default title */ +// NULL, /* no parent window */ +// GTK_FILE_CHOOSER_ACTION_OPEN, +// GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, +// GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, +// NULL); +// } +import "C" + +func openFile() string { + widget := C.newOpenFileDialog() + defer C.gtk_widget_destroy(widget) + dialog := (*C.GtkDialog)(unsafe.Pointer(widget)) + fc := (*C.GtkFileChooser)(unsafe.Pointer(widget)) + C.gtk_file_chooser_set_local_only(fc, C.FALSE) + C.gtk_file_chooser_set_select_multiple(fc, C.FALSE) + C.gtk_file_chooser_set_show_hidden(fc, C.TRUE) + inmodal = true + response := C.gtk_dialog_run(dialog) + inmodal = false + if response != C.GTK_RESPONSE_ACCEPT { + return "" + } + filename := C.gtk_file_chooser_get_filename(fc) + if filename == nil { + panic("[DEBUG TODO] chosen filename NULL") + } + defer C.g_free(C.gpointer(unsafe.Pointer(filename))) + return fromgstr(filename) +} diff --git a/redo/uitask_unix.go b/redo/uitask_unix.go index a97074c..d330e4b 100644 --- a/redo/uitask_unix.go +++ b/redo/uitask_unix.go @@ -39,6 +39,7 @@ func issue(f *func()) { C.gdk_threads_add_idle(C.GSourceFunc(C.doissue), C.gpointer(unsafe.Pointer(f))) } +// TODO this is not order-safe! var inmodal = false //export doissue