fix: 菜单项灰色 — 关闭所有菜单 autoenablesItems + 实现 validateMenuItem

This commit is contained in:
JOJO 2026-04-24 22:21:06 +08:00
parent 9460cac79a
commit 2a2582ea5e

View File

@ -78,11 +78,19 @@ final class MenuBarController: NSObject {
languageMenuItems.append(item)
}
// autoenablesItems
languageMenu.autoenablesItems = false
let languageSubmenuItem = NSMenuItem()
languageSubmenuItem.title = "Language"
languageSubmenuItem.submenu = languageMenu
menu.addItem(languageSubmenuItem)
//
for item in languageMenuItems {
print("[Menu Debug] Language item: '\(item.title)' enabled=\(item.isEnabled) target=\(String(describing: item.target)) action=\(String(describing: item.action))")
}
menu.addItem(.separator())
// ===== =====
@ -109,11 +117,19 @@ final class MenuBarController: NSObject {
modeMenuItems.append(assistModeItem)
modeMenu.addItem(assistModeItem)
// autoenablesItems
modeMenu.autoenablesItems = false
let modeSubmenuItem = NSMenuItem()
modeSubmenuItem.title = "Mode"
modeSubmenuItem.submenu = modeMenu
menu.addItem(modeSubmenuItem)
//
for item in modeMenuItems {
print("[Menu Debug] Mode item: '\(item.title)' enabled=\(item.isEnabled) target=\(String(describing: item.target)) action=\(String(describing: item.action))")
}
menu.addItem(.separator())
// ===== Input LLM =====
@ -167,9 +183,24 @@ final class MenuBarController: NSObject {
quitItem.target = self
menu.addItem(quitItem)
//
menu.autoenablesItems = false
languageMenu.autoenablesItems = false
modeMenu.autoenablesItems = false
inputLLMSubmenu.autoenablesItems = false
assistLLMSubmenu.autoenablesItems = false
statusItem.menu = menu
}
// MARK: - NSMenuItemValidation
///
@objc func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
// target/action
return true
}
private func updateInputLLMMenuState() {
inputLLMEnabledItem.state = Config.shared.inputLLM.enabled ? .on : .off
}
@ -196,14 +227,22 @@ final class MenuBarController: NSObject {
}
@objc private func selectLanguage(_ sender: NSMenuItem) {
guard let lang = sender.representedObject as? RecognitionLanguage else { return }
print("[Menu Debug] selectLanguage called! sender.title=\(sender.title) sender.representedObject=\(String(describing: sender.representedObject))")
guard let lang = sender.representedObject as? RecognitionLanguage else {
print("[Menu Debug] selectLanguage FAILED: representedObject is not RecognitionLanguage, actual type: \(type(of: sender.representedObject))")
return
}
Config.shared.language = lang
updateLanguageMenuState()
print("[Menu] Language switched to: \(lang.displayName)")
}
@objc private func selectMode(_ sender: NSMenuItem) {
guard let mode = sender.representedObject as? TriggerMode else { return }
print("[Menu Debug] selectMode called! sender.title=\(sender.title) sender.representedObject=\(String(describing: sender.representedObject))")
guard let mode = sender.representedObject as? TriggerMode else {
print("[Menu Debug] selectMode FAILED: representedObject is not TriggerMode, actual type: \(type(of: sender.representedObject))")
return
}
Config.shared.triggerMode = mode
updateModeMenuState()
print("[Menu] Mode switched to: \(mode)")