diff options
| author | Pietro Gagliardi <[email protected]> | 2014-08-26 13:54:55 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-08-26 13:54:55 -0400 |
| commit | ecc02ee73202e9a6eba6c3c334f648cfd1660757 (patch) | |
| tree | b033c76c74c1d62ad4c35327cfa8ce1b04869135 /redo/dialog_unix.go | |
| parent | 8fec7176de8f1927aad1ae33c5db234213031264 (diff) | |
Implemented the new dialog system on GTK+.
Diffstat (limited to 'redo/dialog_unix.go')
| -rw-r--r-- | redo/dialog_unix.go | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/redo/dialog_unix.go b/redo/dialog_unix.go index a4020aa..7ecef93 100644 --- a/redo/dialog_unix.go +++ b/redo/dialog_unix.go @@ -10,11 +10,12 @@ import ( // #include "gtk_unix.h" // #include "modalqueue.h" +// extern void our_openfile_response_callback(GtkDialog *, gint, gpointer); // /* because cgo doesn't like ... */ -// GtkWidget *newOpenFileDialog(void) +// static inline GtkWidget *newOpenFileDialog(GtkWindow *parent) // { // return gtk_file_chooser_dialog_new(NULL, /* default title */ -// NULL, /* no parent window */ +// parent, // GTK_FILE_CHOOSER_ACTION_OPEN, // GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, // GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, @@ -22,24 +23,37 @@ import ( // } import "C" -func openFile() string { - widget := C.newOpenFileDialog() - defer C.gtk_widget_destroy(widget) +func (w *window) openFile(f func(filename string)) { + widget := C.newOpenFileDialog(w.window) + window := (*C.GtkWindow)(unsafe.Pointer(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) - C.beginModal() - response := C.gtk_dialog_run(dialog) - C.endModal() + C.gtk_window_set_modal(window, C.TRUE) + g_signal_connect( + C.gpointer(unsafe.Pointer(dialog)), + "response", + C.GCallback(C.our_openfile_response_callback), + C.gpointer(unsafe.Pointer(&f))) + C.gtk_widget_show_all(widget) +} + +//export our_openfile_response_callback +func our_openfile_response_callback(dialog *C.GtkDialog, response C.gint, data C.gpointer) { + f := (*func(string))(unsafe.Pointer(data)) if response != C.GTK_RESPONSE_ACCEPT { - return "" + (*f)("") + C.gtk_widget_destroy((*C.GtkWidget)(unsafe.Pointer(dialog))) + return } - filename := C.gtk_file_chooser_get_filename(fc) + filename := C.gtk_file_chooser_get_filename((*C.GtkFileChooser)(unsafe.Pointer(dialog))) if filename == nil { panic("[DEBUG TODO] chosen filename NULL") } - defer C.g_free(C.gpointer(unsafe.Pointer(filename))) - return fromgstr(filename) + realfilename := fromgstr(filename) + C.g_free(C.gpointer(unsafe.Pointer(filename))) + C.gtk_widget_destroy((*C.GtkWidget)(unsafe.Pointer(dialog))) + (*f)(realfilename) } |
