fix: 菜单项灰色 — 关闭所有菜单 autoenablesItems + 实现 validateMenuItem
This commit is contained in:
parent
9460cac79a
commit
2a2582ea5e
@ -78,10 +78,18 @@ final class MenuBarController: NSObject {
|
|||||||
languageMenuItems.append(item)
|
languageMenuItems.append(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 禁用 autoenablesItems,防止系统自动禁用菜单项
|
||||||
|
languageMenu.autoenablesItems = false
|
||||||
|
|
||||||
let languageSubmenuItem = NSMenuItem()
|
let languageSubmenuItem = NSMenuItem()
|
||||||
languageSubmenuItem.title = "Language"
|
languageSubmenuItem.title = "Language"
|
||||||
languageSubmenuItem.submenu = languageMenu
|
languageSubmenuItem.submenu = languageMenu
|
||||||
menu.addItem(languageSubmenuItem)
|
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())
|
menu.addItem(.separator())
|
||||||
|
|
||||||
@ -109,10 +117,18 @@ final class MenuBarController: NSObject {
|
|||||||
modeMenuItems.append(assistModeItem)
|
modeMenuItems.append(assistModeItem)
|
||||||
modeMenu.addItem(assistModeItem)
|
modeMenu.addItem(assistModeItem)
|
||||||
|
|
||||||
|
// 禁用 autoenablesItems,防止系统自动禁用菜单项
|
||||||
|
modeMenu.autoenablesItems = false
|
||||||
|
|
||||||
let modeSubmenuItem = NSMenuItem()
|
let modeSubmenuItem = NSMenuItem()
|
||||||
modeSubmenuItem.title = "Mode"
|
modeSubmenuItem.title = "Mode"
|
||||||
modeSubmenuItem.submenu = modeMenu
|
modeSubmenuItem.submenu = modeMenu
|
||||||
menu.addItem(modeSubmenuItem)
|
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())
|
menu.addItem(.separator())
|
||||||
|
|
||||||
@ -167,9 +183,24 @@ final class MenuBarController: NSObject {
|
|||||||
quitItem.target = self
|
quitItem.target = self
|
||||||
menu.addItem(quitItem)
|
menu.addItem(quitItem)
|
||||||
|
|
||||||
|
// 关闭所有菜单的自动验证,改为手动管理
|
||||||
|
menu.autoenablesItems = false
|
||||||
|
languageMenu.autoenablesItems = false
|
||||||
|
modeMenu.autoenablesItems = false
|
||||||
|
inputLLMSubmenu.autoenablesItems = false
|
||||||
|
assistLLMSubmenu.autoenablesItems = false
|
||||||
|
|
||||||
statusItem.menu = menu
|
statusItem.menu = menu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - NSMenuItemValidation
|
||||||
|
|
||||||
|
/// 手动验证所有菜单项(替代系统的自动验证)
|
||||||
|
@objc func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
|
||||||
|
// 所有菜单项统一启用,由 target/action 决定是否响应
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
private func updateInputLLMMenuState() {
|
private func updateInputLLMMenuState() {
|
||||||
inputLLMEnabledItem.state = Config.shared.inputLLM.enabled ? .on : .off
|
inputLLMEnabledItem.state = Config.shared.inputLLM.enabled ? .on : .off
|
||||||
}
|
}
|
||||||
@ -196,14 +227,22 @@ final class MenuBarController: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc private func selectLanguage(_ sender: NSMenuItem) {
|
@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
|
Config.shared.language = lang
|
||||||
updateLanguageMenuState()
|
updateLanguageMenuState()
|
||||||
print("[Menu] Language switched to: \(lang.displayName)")
|
print("[Menu] Language switched to: \(lang.displayName)")
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc private func selectMode(_ sender: NSMenuItem) {
|
@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
|
Config.shared.triggerMode = mode
|
||||||
updateModeMenuState()
|
updateModeMenuState()
|
||||||
print("[Menu] Mode switched to: \(mode)")
|
print("[Menu] Mode switched to: \(mode)")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user