diff options
Diffstat (limited to 'dialog_unix.go')
| -rw-r--r-- | dialog_unix.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/dialog_unix.go b/dialog_unix.go new file mode 100644 index 0000000..83e5f29 --- /dev/null +++ b/dialog_unix.go @@ -0,0 +1,42 @@ +// +build !windows,!darwin,!plan9 + +// 7 february 2014 +package main + +import ( + "unsafe" +) + +// #cgo pkg-config: gtk+-3.0 +// #include <stdlib.h> +// #include <gtk/gtk.h> +// /* because cgo seems to choke on ... */ +// /* TODO does NULL parent make the box application-global? docs are unclear */ +// /* TODO does secondary text appear in the titlebar or above the message? if the latter, will gtk_window_set_title() work? */ +// GtkWidget *gtkNewMsgBox(GtkMessageType type, GtkButtonsType buttons, char *title, char *text) { GtkWidget *k = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, type, buttons, "%s", (gchar *) title); gtk_message_dialog_format_secondary_text((GtkMessageDialog *) k, "%s", (gchar *) text); return k; } +import "C" + +func _msgBox(text string, title string, msgtype C.GtkMessageType, buttons C.GtkButtonsType) (result C.gint) { + ret := make(chan C.gint) + defer close(ret) + uitask <- func() { + ctitle := C.CString(title) + defer C.free(unsafe.Pointer(ctitle)) + ctext := C.CString(text) + defer C.free(unsafe.Pointer(ctext)) + box := C.gtkNewMsgBox(msgtype, buttons, ctitle, ctext) + response := C.gtk_dialog_run((*C.GtkDialog)(unsafe.Pointer(box))) + C.gtk_widget_destroy(box) + ret <- response + } + return <-ret +} + +func msgBox(title string, text string) { + // TODO add an icon? + _msgBox(text, title, C.GtkMessageType(C.GTK_MESSAGE_OTHER), C.GtkButtonsType(C.GTK_BUTTONS_OK)) +} + +func msgBoxError(title string, text string) { + _msgBox(text, title, C.GtkMessageType(C.GTK_MESSAGE_ERROR), C.GtkButtonsType(C.GTK_BUTTONS_OK)) +} |
