fix: 菜单项灰色 — 关闭所有菜单 autoenablesItems + 实现 validateMenuItem
This commit is contained in:
parent
9460cac79a
commit
2a2582ea5e
@ -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)")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user