diff --git a/data/binding/binding.go b/data/binding/binding.go index 3c9d92f378..f1534fc621 100644 --- a/data/binding/binding.go +++ b/data/binding/binding.go @@ -64,7 +64,7 @@ type base struct { // AddListener allows a data listener to be informed of changes to this item. func (b *base) AddListener(l DataListener) { - queueItem(func() { + fyne.Do(func() { b.listeners = append(b.listeners, l) l.DataChanged() }) @@ -72,7 +72,7 @@ func (b *base) AddListener(l DataListener) { // RemoveListener should be called if the listener is no longer interested in being informed of data change events. func (b *base) RemoveListener(l DataListener) { - queueItem(func() { + fyne.Do(func() { for i, listener := range b.listeners { if listener == l { // Delete without preserving order: @@ -87,7 +87,7 @@ func (b *base) RemoveListener(l DataListener) { } func (b *base) trigger() { - queueItem(func() { + fyne.Do(func() { for _, listen := range b.listeners { listen.DataChanged() } diff --git a/data/binding/convert.go b/data/binding/convert.go index 26548f4587..9c12d1d867 100644 --- a/data/binding/convert.go +++ b/data/binding/convert.go @@ -258,7 +258,7 @@ func (s *toStringFrom[T]) Set(str string) error { return err } - queueItem(s.DataChanged) + s.trigger() return nil } @@ -324,7 +324,7 @@ func (s *fromStringTo[T]) Set(val T) error { return err } - queueItem(s.DataChanged) + s.trigger() return nil } @@ -367,7 +367,7 @@ func (s *toInt[T]) Set(v int) error { return err } - queueItem(s.DataChanged) + s.trigger() return nil } @@ -408,7 +408,7 @@ func (s *fromIntTo[T]) Set(val T) error { return err } - queueItem(s.DataChanged) + s.trigger() return nil } diff --git a/data/binding/queue.go b/data/binding/queue.go deleted file mode 100644 index bb4d260d90..0000000000 --- a/data/binding/queue.go +++ /dev/null @@ -1,15 +0,0 @@ -package binding - -import ( - "fyne.io/fyne/v2" - "fyne.io/fyne/v2/internal/async" -) - -func queueItem(f func()) { - if async.IsMainGoroutine() { - f() - return - } - - fyne.Do(f) -} diff --git a/data/binding/queue_test.go b/data/binding/queue_test.go deleted file mode 100644 index c1d2c7eb3d..0000000000 --- a/data/binding/queue_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package binding - -import ( - "os" - "runtime" - "sync" - "testing" - - "fyne.io/fyne/v2/internal/async" - "github.com/stretchr/testify/assert" -) - -func TestMain(m *testing.M) { - os.Exit(m.Run()) -} - -// TestQueueLazyInit resets the current unbounded func queue, and tests -// if the queue is lazy initialized. -// -// Note that this test may fail, if any of other tests in this package -// calls t.Parallel(). -func TestQueueLazyInit(t *testing.T) { - initialGoRoutines := runtime.NumGoroutine() - - wg := sync.WaitGroup{} - wg.Add(1000) - for i := 0; i < 1000; i++ { - queueItem(func() { wg.Done() }) - } - wg.Wait() - - n := runtime.NumGoroutine() - if n > initialGoRoutines+2 { - t.Fatalf("unexpected number of goroutines after initialization, probably leaking: got %v want %v", n, initialGoRoutines+2) - } -} - -func TestQueueItem(t *testing.T) { - called := 0 - queueItem(func() { called++ }) - queueItem(func() { called++ }) - assert.Equal(t, 2, called) -} - -func TestMakeInfiniteQueue(t *testing.T) { - var wg sync.WaitGroup - queue := async.NewUnboundedChan[func()]() - - wg.Add(1) - c := 0 - go func() { - for range queue.Out() { - c++ - } - wg.Done() - }() - - for i := 0; i < 2048; i++ { - queue.In() <- func() {} - } - queue.Close() - - wg.Wait() - assert.Equal(t, 2048, c) -}