4
4
"bytes"
5
5
"os"
6
6
"path/filepath"
7
- "sync"
8
7
9
8
"fyne.io/fyne/v2"
10
9
"fyne.io/fyne/v2/internal/app"
@@ -33,11 +32,11 @@ func (sc *SettingsSchema) StoragePath() string {
33
32
var _ fyne.Settings = (* settings )(nil )
34
33
35
34
type settings struct {
36
- propertyLock sync.RWMutex
37
35
theme fyne.Theme
38
36
themeSpecified bool
39
37
variant fyne.ThemeVariant
40
38
39
+ listeners []func (fyne.Settings )
41
40
changeListeners async.Map [chan fyne.Settings , bool ]
42
41
watcher any // normally *fsnotify.Watcher or nil - avoid import in this file
43
42
@@ -49,8 +48,6 @@ func (s *settings) BuildType() fyne.BuildType {
49
48
}
50
49
51
50
func (s * settings ) PrimaryColor () string {
52
- s .propertyLock .RLock ()
53
- defer s .propertyLock .RUnlock ()
54
51
return s .schema .PrimaryColor
55
52
}
56
53
@@ -59,8 +56,6 @@ func (s *settings) PrimaryColor() string {
59
56
//
60
57
// Deprecated: Use container.NewThemeOverride to change the appearance of part of your application.
61
58
func (s * settings ) OverrideTheme (theme fyne.Theme , name string ) {
62
- s .propertyLock .Lock ()
63
- defer s .propertyLock .Unlock ()
64
59
s .schema .PrimaryColor = name
65
60
s .theme = theme
66
61
}
@@ -70,8 +65,6 @@ func (s *settings) Theme() fyne.Theme {
70
65
fyne .LogError ("Attempt to access current Fyne theme when no app is started" , nil )
71
66
return nil
72
67
}
73
- s .propertyLock .RLock ()
74
- defer s .propertyLock .RUnlock ()
75
68
return s .theme
76
69
}
77
70
@@ -89,23 +82,17 @@ func (s *settings) ThemeVariant() fyne.ThemeVariant {
89
82
}
90
83
91
84
func (s * settings ) applyTheme (theme fyne.Theme , variant fyne.ThemeVariant ) {
92
- s .propertyLock .Lock ()
93
- defer s .propertyLock .Unlock ()
94
85
s .variant = variant
95
86
s .theme = theme
96
87
s .apply ()
97
88
}
98
89
99
90
func (s * settings ) applyVariant (variant fyne.ThemeVariant ) {
100
- s .propertyLock .Lock ()
101
- defer s .propertyLock .Unlock ()
102
91
s .variant = variant
103
92
s .apply ()
104
93
}
105
94
106
95
func (s * settings ) Scale () float32 {
107
- s .propertyLock .RLock ()
108
- defer s .propertyLock .RUnlock ()
109
96
if s .schema .Scale < 0.0 {
110
97
return 1.0 // catching any really old data still using the `-1` value for "auto" scale
111
98
}
@@ -116,6 +103,10 @@ func (s *settings) AddChangeListener(listener chan fyne.Settings) {
116
103
s .changeListeners .Store (listener , true ) // the boolean is just a dummy value here.
117
104
}
118
105
106
+ func (s * settings ) AddListener (listener func (fyne.Settings )) {
107
+ s .listeners = append (s .listeners , listener )
108
+ }
109
+
119
110
func (s * settings ) apply () {
120
111
s .changeListeners .Range (func (listener chan fyne.Settings , _ bool ) bool {
121
112
select {
@@ -126,6 +117,10 @@ func (s *settings) apply() {
126
117
}
127
118
return true
128
119
})
120
+
121
+ for _ , l := range s .listeners {
122
+ l (s )
123
+ }
129
124
}
130
125
131
126
func (s * settings ) fileChanged () {
0 commit comments