diff --git a/Sources/CodexBar/PreferencesAdvancedPane.swift b/Sources/CodexBar/PreferencesAdvancedPane.swift index 86e9da909d..e2f0b36577 100644 --- a/Sources/CodexBar/PreferencesAdvancedPane.swift +++ b/Sources/CodexBar/PreferencesAdvancedPane.swift @@ -64,10 +64,6 @@ struct AdvancedPane: View { title: L("surprise_me_title"), subtitle: L("surprise_me_subtitle"), binding: self.$settings.randomBlinkEnabled) - PreferenceToggleRow( - title: "Color-coded icons", - subtitle: "Tint menu bar icons green, yellow, or red based on session usage.", - binding: self.$settings.colorCodedIcons) PreferenceToggleRow( title: L("weekly_limit_confetti_title"), subtitle: L("weekly_limit_confetti_subtitle"), diff --git a/Sources/CodexBar/PreferencesDisplayPane.swift b/Sources/CodexBar/PreferencesDisplayPane.swift index 0472195cc1..4a20d55c40 100644 --- a/Sources/CodexBar/PreferencesDisplayPane.swift +++ b/Sources/CodexBar/PreferencesDisplayPane.swift @@ -37,6 +37,10 @@ struct DisplayPane: View { binding: self.$settings.menuBarShowsHighestUsage) .disabled(!self.settings.mergeIcons) .opacity(self.settings.mergeIcons ? 1 : 0.5) + PreferenceToggleRow( + title: "Color-coded icons", + subtitle: "Tint menu bar icons green, yellow, or red based on session usage.", + binding: self.$settings.colorCodedIcons) PreferenceToggleRow( title: L("menu_bar_shows_percent_title"), subtitle: L("menu_bar_shows_percent_subtitle"), diff --git a/Sources/CodexBar/SettingsStore+MenuObservation.swift b/Sources/CodexBar/SettingsStore+MenuObservation.swift index b459a30118..0057786d69 100644 --- a/Sources/CodexBar/SettingsStore+MenuObservation.swift +++ b/Sources/CodexBar/SettingsStore+MenuObservation.swift @@ -26,6 +26,7 @@ extension SettingsStore { _ = self.menuBarShowsBrandIconWithPercent _ = self.menuBarShowsHighestUsage _ = self.menuBarDisplayMode + _ = self.menuBarSeparatorStyle _ = self.kiroMenuBarDisplayMode _ = self.historicalTrackingEnabled _ = self.multiAccountMenuLayout diff --git a/Sources/CodexBar/StatusItemController.swift b/Sources/CodexBar/StatusItemController.swift index d3acd360cb..4eacbb4ca0 100644 --- a/Sources/CodexBar/StatusItemController.swift +++ b/Sources/CodexBar/StatusItemController.swift @@ -362,9 +362,16 @@ final class StatusItemController: NSObject, NSMenuDelegate, StatusItemControllin // On macOS 26+, usage colors are baked into non-template images. Re-render when the system // appearance changes so dynamic colors (systemGreen/Orange/Red) resolve to their new values. + // The render-skip signatures don't encode appearance, so clear them first — otherwise an + // unchanged usage/status value would short-circuit the re-render and leave the stale bitmap. if #available(macOS 26, *) { self.appearanceObservation = NSApp.observe(\.effectiveAppearance) { [weak self] _, _ in - Task { @MainActor in self?.updateIcons() } + Task { @MainActor in + guard let self else { return } + self.lastAppliedMergedIconRenderSignature = nil + self.lastAppliedProviderIconRenderSignatures.removeAll() + self.updateIcons() + } } } }