diff --git a/BrewBar/BrewBarApp.swift b/BrewBar/BrewBarApp.swift index 4df8fd1..467a6d4 100644 --- a/BrewBar/BrewBarApp.swift +++ b/BrewBar/BrewBarApp.swift @@ -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: "")