summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-02-16 16:23:49 -0500
committerPietro Gagliardi <[email protected]>2014-02-16 16:23:49 -0500
commitc40b7b5599236a8e85f7bf610bfaebd4a609da0a (patch)
treec449724ce99374be22ae5124d4c8e0a93cb7a52a
parent21c1ec6f83fb2d5cb80c02c0cd7ed51bb4e06e3a (diff)
Added basic signal connection. I'm going to need to build a different callback system, though...
-rw-r--r--gtkcalls_unix.go4
-rw-r--r--sysdata_unix.go15
2 files changed, 19 insertions, 0 deletions
diff --git a/gtkcalls_unix.go b/gtkcalls_unix.go
index d09fd61..f56e6fc 100644
--- a/gtkcalls_unix.go
+++ b/gtkcalls_unix.go
@@ -21,6 +21,10 @@ import "C"
type (
gtkWidget C.GtkWidget
+
+ // these are needed for signals
+ gdkEvent C.GdkEvent
+ gpointer C.gpointer
)
func fromgbool(b C.gboolean) bool {
diff --git a/sysdata_unix.go b/sysdata_unix.go
index 363e3c8..3466a8a 100644
--- a/sysdata_unix.go
+++ b/sysdata_unix.go
@@ -18,12 +18,24 @@ type sysData struct {
type classData struct {
make func() *gtkWidget
setText func(widget *gtkWidget, text string)
+ // ...
+ signals map[string]func(*sysData) interface{}
}
var classTypes = [nctypes]*classData{
c_window: &classData{
make: gtk_window_new,
setText: gtk_window_set_title,
+ signals: map[string]func(*sysData) interface{}{
+ "delete-event": func(w *sysData) interface{} {
+ return func(*gtkWidget, *gdkEvent, gpointer) bool {
+ if w.event != nil {
+ w.event <- struct{}{}
+ }
+ return true // do not close the window
+ }
+ },
+ },
},
c_button: &classData{
// make: gtk_button_new,
@@ -57,6 +69,9 @@ println(s.widget)
uitask <- func() {
fixed := gtk_fixed_new()
gtk_container_add(s.widget, fixed)
+ for signal, generator := range ct.signals {
+ g_signal_connect(s.widget, signal, generator(s))
+ }
ret <- fixed
}
s.container = <-ret