diff --git a/Sources/App/MenuBarController.swift b/Sources/App/MenuBarController.swift index 65f1ad4..2e82226 100644 --- a/Sources/App/MenuBarController.swift +++ b/Sources/App/MenuBarController.swift @@ -78,10 +78,18 @@ 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,10 +117,18 @@ 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()) @@ -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)")