Buffered the event channels, as per skelterjohn's suggestion; I thought this would fix the faults I now get, but it doesn't...
This commit is contained in:
parent
1f08c874e0
commit
23f6a07c7f
|
@ -21,7 +21,7 @@ func NewButton(text string) (b *Button) {
|
||||||
return &Button{
|
return &Button{
|
||||||
sysData: mksysdata(c_button),
|
sysData: mksysdata(c_button),
|
||||||
initText: text,
|
initText: text,
|
||||||
Clicked: make(chan struct{}),
|
Clicked: Event(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
main.go
2
main.go
|
@ -7,7 +7,7 @@ import (
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
w := NewWindow("Main Window", 320, 240)
|
w := NewWindow("Main Window", 320, 240)
|
||||||
w.Closing = make(chan struct{})
|
w.Closing = Event()
|
||||||
b := NewButton("Click Me")
|
b := NewButton("Click Me")
|
||||||
b2 := NewButton("Or Me")
|
b2 := NewButton("Or Me")
|
||||||
s2 := NewStack(Horizontal, b, b2)
|
s2 := NewStack(Horizontal, b, b2)
|
||||||
|
|
|
@ -5,6 +5,13 @@ import (
|
||||||
"runtime"
|
"runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const eventbufsiz = 100 // suggested by skelterjohn
|
||||||
|
|
||||||
|
// Event returns a new channel suitable for listening for events.
|
||||||
|
func Event() chan struct{} {
|
||||||
|
return make(chan struct{}, eventbufsiz)
|
||||||
|
}
|
||||||
|
|
||||||
// The sysData type contains all system data. It provides the system-specific underlying implementation. It is guaranteed to have the following by embedding:
|
// The sysData type contains all system data. It provides the system-specific underlying implementation. It is guaranteed to have the following by embedding:
|
||||||
type cSysData struct {
|
type cSysData struct {
|
||||||
ctype int
|
ctype int
|
||||||
|
@ -56,7 +63,7 @@ func (c *cSysData) delete(int) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// signal sends the event signal. This raise is done asynchronously to avoid deadlocking the UI task.
|
// signal sends the event signal. This raise is done asynchronously to avoid deadlocking the UI task.
|
||||||
// Thanks skelterjohn for this techinque: if we can't queue any more events, drop them; TODO this would be best if the channel is buffered
|
// Thanks skelterjohn for this techinque: if we can't queue any more events, drop them
|
||||||
func (s *cSysData) signal() {
|
func (s *cSysData) signal() {
|
||||||
if s.event != nil {
|
if s.event != nil {
|
||||||
go func() {
|
go func() {
|
||||||
|
|
Loading…
Reference in New Issue