summaryrefslogtreecommitdiff
path: root/button.go
diff options
context:
space:
mode:
Diffstat (limited to 'button.go')
-rw-r--r--button.go24
1 files changed, 21 insertions, 3 deletions
diff --git a/button.go b/button.go
index c4143aa..96a68ed 100644
--- a/button.go
+++ b/button.go
@@ -2,8 +2,18 @@
package ui
+import (
+ "sync"
+)
+
// A Button represents a clickable button with some text.
type Button struct {
+ // Clicked gets a message when the button is clicked.
+ // You cannot change it once the Window containing the Button has been created.
+ // If you do not respond to this signal, nothing will happen.
+ Clicked chan struct{}
+
+ lock sync.Mutex
created bool
sysData *sysData
initText string
@@ -14,11 +24,15 @@ func NewButton(text string) (b *Button) {
return &Button{
sysData: mksysdata(c_button),
initText: text,
+ Clicked: newEvent(),
}
}
// SetText sets the button's text.
func (b *Button) SetText(text string) {
+ b.lock.Lock()
+ defer b.lock.Unlock()
+
if b.created {
b.sysData.setText(text)
return
@@ -28,6 +42,9 @@ func (b *Button) SetText(text string) {
// Text returns the button's text.
func (b *Button) Text() string {
+ b.lock.Lock()
+ defer b.lock.Unlock()
+
if b.created {
return b.sysData.text()
}
@@ -35,9 +52,10 @@ func (b *Button) Text() string {
}
func (b *Button) make(window *sysData) error {
- b.sysData.event = func() {
- window.winhandler.Event(Clicked, b)
- }
+ b.lock.Lock()
+ defer b.lock.Unlock()
+
+ b.sysData.event = b.Clicked
err := b.sysData.make(window)
if err != nil {
return err