Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Sources/CodexBar/StatusItemController+Menu.swift
Original file line number Diff line number Diff line change
Expand Up @@ -120,9 +120,11 @@ extension StatusItemController {

let hasTokenAccountSwitcher = menu.items.contains { $0.view is TokenAccountSwitcherView }
let switcherProvidersMatch = enabledProviders == self.lastSwitcherProviders
let switcherUsageBarsShowUsedMatch = self.settings.usageBarsShowUsed == self.lastSwitcherUsageBarsShowUsed
let canSmartUpdate = self.shouldMergeIcons &&
enabledProviders.count > 1 &&
switcherProvidersMatch &&
switcherUsageBarsShowUsedMatch &&
tokenAccountDisplay == nil &&
!hasTokenAccountSwitcher &&
!menu.items.isEmpty &&
Expand Down Expand Up @@ -154,6 +156,7 @@ extension StatusItemController {
// Track which providers the switcher was built with for smart update detection
if self.shouldMergeIcons, enabledProviders.count > 1 {
self.lastSwitcherProviders = enabledProviders
self.lastSwitcherUsageBarsShowUsed = self.settings.usageBarsShowUsed
}
self.addTokenAccountSwitcherIfNeeded(to: menu, display: tokenAccountDisplay)
let menuContext = MenuCardContext(
Expand Down
11 changes: 11 additions & 0 deletions Sources/CodexBar/StatusItemController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ final class StatusItemController: NSObject, NSMenuDelegate, StatusItemControllin
private var lastProviderOrder: [UsageProvider]
private var lastMergeIcons: Bool
private var lastSwitcherShowsIcons: Bool
private var lastObservedUsageBarsShowUsed: Bool
/// Tracks which `usageBarsShowUsed` mode the provider switcher was built with.
/// Used to decide whether we can "smart update" menu content without rebuilding the switcher.
var lastSwitcherUsageBarsShowUsed: Bool
/// Tracks which providers the merged menu's switcher was built with, to detect when it needs full rebuild.
var lastSwitcherProviders: [UsageProvider] = []
let loginLogger = CodexBarLog.logger(LogCategories.login)
Expand Down Expand Up @@ -152,6 +156,8 @@ final class StatusItemController: NSObject, NSMenuDelegate, StatusItemControllin
self.lastProviderOrder = settings.providerOrder
self.lastMergeIcons = settings.mergeIcons
self.lastSwitcherShowsIcons = settings.switcherShowsIcons
self.lastObservedUsageBarsShowUsed = settings.usageBarsShowUsed
self.lastSwitcherUsageBarsShowUsed = settings.usageBarsShowUsed
self.statusBar = statusBar
let item = statusBar.statusItem(withLength: NSStatusItem.variableLength)
// Ensure the icon is rendered at 1:1 without resampling (crisper edges for template images).
Expand Down Expand Up @@ -291,6 +297,11 @@ final class StatusItemController: NSObject, NSMenuDelegate, StatusItemControllin
self.lastSwitcherShowsIcons = showsIcons
shouldRefresh = true
}
let usageBarsShowUsed = self.settings.usageBarsShowUsed
if usageBarsShowUsed != self.lastObservedUsageBarsShowUsed {
self.lastObservedUsageBarsShowUsed = usageBarsShowUsed
shouldRefresh = true
}
return shouldRefresh
}

Expand Down