summaryrefslogtreecommitdiff
path: root/spinbox_unix.go
diff options
context:
space:
mode:
Diffstat (limited to 'spinbox_unix.go')
-rw-r--r--spinbox_unix.go21
1 files changed, 21 insertions, 0 deletions
diff --git a/spinbox_unix.go b/spinbox_unix.go
index b6b2ec3..ca84b28 100644
--- a/spinbox_unix.go
+++ b/spinbox_unix.go
@@ -9,6 +9,7 @@ import (
)
// #include "gtk_unix.h"
+// extern void spinboxChanged(GtkSpinButton *, gpointer);
import "C"
// TODO preferred width may be too wide
@@ -16,6 +17,7 @@ import "C"
type spinbox struct {
*controlSingleWidget
spinbutton *C.GtkSpinButton
+ changed *event
}
func newSpinbox(min int, max int) Spinbox {
@@ -24,9 +26,18 @@ func newSpinbox(min int, max int) Spinbox {
s := &spinbox{
controlSingleWidget: newControlSingleWidget(widget),
spinbutton: (*C.GtkSpinButton)(unsafe.Pointer(widget)),
+ changed: newEvent(),
}
C.gtk_spin_button_set_digits(s.spinbutton, 0) // integers
C.gtk_spin_button_set_numeric(s.spinbutton, C.TRUE) // digits only
+ // this isn't specifically documented as the signal to connect to until 3.14
+ // it has existed as far back as 3.4, though, if not earlier
+ // there's also ::change-value which is for keyboard changing
+ g_signal_connect(
+ C.gpointer(unsafe.Pointer(s.spinbutton)),
+ "value-changed",
+ C.GCallback(C.spinboxChanged),
+ C.gpointer(unsafe.Pointer(s)))
return s
}
@@ -46,3 +57,13 @@ func (s *spinbox) SetValue(value int) {
}
C.gtk_spin_button_set_value(s.spinbutton, C.gdouble(value))
}
+
+func (s *spinbox) OnChanged(e func()) {
+ s.changed.set(e)
+}
+
+//export spinboxChanged
+func spinboxChanged(swid *C.GtkSpinButton, data C.gpointer) {
+ s := (*spinbox)(unsafe.Pointer(data))
+ s.changed.fire()
+}