File tree Expand file tree Collapse file tree 3 files changed +28
-10
lines changed Expand file tree Collapse file tree 3 files changed +28
-10
lines changed Original file line number Diff line number Diff line change @@ -104,6 +104,16 @@ final class AppState: ObservableObject {
104
104
}
105
105
. store ( in: & c)
106
106
107
+ NSWorkspace . shared. publisher ( for: \. frontmostApplication)
108
+ . receive ( on: DispatchQueue . main)
109
+ . sink { [ weak self] frontmostApplication in
110
+ guard let self else {
111
+ return
112
+ }
113
+ navigationState. isAppFrontmost = frontmostApplication == . current
114
+ }
115
+ . store ( in: & c)
116
+
107
117
if let settingsWindow {
108
118
settingsWindow. publisher ( for: \. isVisible)
109
119
. receive ( on: DispatchQueue . main)
@@ -116,17 +126,20 @@ final class AppState: ObservableObject {
116
126
. store ( in: & c)
117
127
}
118
128
119
- navigationState. $isSettingsPresented
120
- . receive ( on: DispatchQueue . main)
121
- . sink { isPresented in
122
- guard isPresented else {
123
- return
124
- }
125
- Task {
126
- await self . imageCache. updateCacheWithoutChecks ( sections: MenuBarSection . Name. allCases)
127
- }
129
+ Publishers . Merge (
130
+ navigationState. $isAppFrontmost,
131
+ navigationState. $isSettingsPresented
132
+ )
133
+ . debounce ( for: 0.1 , scheduler: DispatchQueue . main)
134
+ . sink { shouldUpdate in
135
+ guard shouldUpdate else {
136
+ return
128
137
}
129
- . store ( in: & c)
138
+ Task {
139
+ await self . imageCache. updateCacheWithoutChecks ( sections: MenuBarSection . Name. allCases)
140
+ }
141
+ }
142
+ . store ( in: & c)
130
143
131
144
menuBarManager. objectWillChange
132
145
. sink { [ weak self] in
Original file line number Diff line number Diff line change @@ -207,6 +207,10 @@ class MenuBarItemImageCache: ObservableObject {
207
207
}
208
208
209
209
if !appState. navigationState. isIceBarPresented {
210
+ guard appState. navigationState. isAppFrontmost else {
211
+ Logger . imageCache. debug ( " Skipping image cache as Ice Bar not visible, app not frontmost " )
212
+ return
213
+ }
210
214
guard appState. navigationState. isSettingsPresented else {
211
215
Logger . imageCache. debug ( " Skipping image cache as Ice Bar not visible, Settings not visible " )
212
216
return
Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ import Combine
8
8
/// The model for app-wide navigation.
9
9
@MainActor
10
10
final class AppNavigationState : ObservableObject {
11
+ @Published var isAppFrontmost = false
11
12
@Published var isSettingsPresented = false
12
13
@Published var isIceBarPresented = false
13
14
@Published var settingsNavigationIdentifier : SettingsNavigationIdentifier = . general
You can’t perform that action at this time.
0 commit comments