Compare commits

...

2 commits

Author SHA1 Message Date
maxsoch 210a8167b8 Merge branch 'fix/upgrade-only-menu' 2026-07-14 17:54:40 +02:00
maxsoch 778671e751 keep the Upgrade only… submenu visible, grey out the empty kind
It only appeared when both formulae and casks were outdated; with a
single kind it vanished entirely. Now it shows whenever anything is
outdated, with the empty kind greyed out (autoenablesItems is off —
AppKit would otherwise re-enable the items from the responder chain
on every menu open).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 17:54:40 +02:00

View file

@ -86,6 +86,9 @@ class AppDelegate: NSObject, NSApplicationDelegate {
menu.addItem(upgradeAllItem)
upgradeOnlyItem = NSMenuItem(title: "🎯 Upgrade only…", action: nil, keyEquivalent: "")
let upgradeOnlySubmenu = NSMenu()
// manual isEnabled control below; otherwise AppKit re-enables the
// items from the responder chain every time the menu opens
upgradeOnlySubmenu.autoenablesItems = false
upgradeFormulaeItem = NSMenuItem(title: "Formulae", action: #selector(upgradeFormulaeOnly), keyEquivalent: "")
upgradeCasksItem = NSMenuItem(title: "Casks", action: #selector(upgradeCasksOnly), keyEquivalent: "")
upgradeOnlySubmenu.addItem(upgradeFormulaeItem)
@ -570,11 +573,13 @@ class AppDelegate: NSObject, NSApplicationDelegate {
outdatedSubmenu.removeAllItems()
outdatedItem.isHidden = outdated.isEmpty
upgradeAllItem.isHidden = outdated.isEmpty
// "only" is meaningful only when both kinds are outdated; with a
// single kind, the main item already upgrades exactly what there is
upgradeOnlyItem.isHidden = outdated.formulae.isEmpty || outdated.casks.isEmpty
upgradeFormulaeItem.title = "Formulae (\(outdated.formulae.count))"
upgradeCasksItem.title = "Casks (\(outdated.casks.count))"
// visible whenever anything is outdated; a kind with nothing to
// upgrade stays listed but greyed out
upgradeOnlyItem.isHidden = outdated.isEmpty
upgradeFormulaeItem.title = outdated.formulae.isEmpty ? "Formulae" : "Formulae (\(outdated.formulae.count))"
upgradeFormulaeItem.isEnabled = !outdated.formulae.isEmpty
upgradeCasksItem.title = outdated.casks.isEmpty ? "Casks" : "Casks (\(outdated.casks.count))"
upgradeCasksItem.isEnabled = !outdated.casks.isEmpty
for package in outdated.all {
let item = NSMenuItem(title: package.label, action: #selector(upgradeSingle(_:)), keyEquivalent: "")