mirror of
https://github.com/mpv-player/mpv
synced 2025-02-16 04:07:08 +00:00
mac/menu: keep track of menu items with dynamic actions
keeping track of the dynamic menu items lets us directly access them by key. we don't need to search in the config array for the right config and menu item.
This commit is contained in:
parent
8d4329a710
commit
73e494a237
@ -37,7 +37,6 @@ extension MenuBar {
|
||||
let command: String
|
||||
let url: String
|
||||
let commandSpecial: MenuKey?
|
||||
var menuItem: MenuItem?
|
||||
var configs: [Config]?
|
||||
|
||||
init(
|
||||
@ -49,7 +48,6 @@ extension MenuBar {
|
||||
command: String = "",
|
||||
url: String = "",
|
||||
commandSpecial: MenuKey? = nil,
|
||||
menuItem: MenuItem? = nil,
|
||||
configs: [Config]? = nil
|
||||
) {
|
||||
self.name = name
|
||||
@ -60,7 +58,6 @@ extension MenuBar {
|
||||
self.command = command
|
||||
self.url = url
|
||||
self.commandSpecial = commandSpecial
|
||||
self.menuItem = menuItem
|
||||
self.configs = configs
|
||||
}
|
||||
}
|
||||
@ -68,6 +65,7 @@ extension MenuBar {
|
||||
|
||||
class MenuBar: NSObject {
|
||||
var menuConfigs: [Config] = []
|
||||
var dynamicMenuItems: [MenuKey:[MenuItem]] = [:]
|
||||
let appIcon: NSImage
|
||||
|
||||
@objc override init() {
|
||||
@ -250,15 +248,14 @@ class MenuBar: NSObject {
|
||||
let mainMenu = NSMenu(title: "MainMenu")
|
||||
NSApp.servicesMenu = NSMenu()
|
||||
|
||||
for (menuConfigIndex, menuConfig) in menuConfigs.enumerated() {
|
||||
for menuConfig in menuConfigs {
|
||||
let menu = NSMenu(title: menuConfig.name)
|
||||
let item = MenuItem(title: menuConfig.name, action: nil, keyEquivalent: menuConfig.key)
|
||||
item.config = menuConfig
|
||||
mainMenu.addItem(item)
|
||||
mainMenu.setSubmenu(menu, for: item)
|
||||
menuConfigs[menuConfigIndex].menuItem = item
|
||||
|
||||
for (subConfigIndex, subConfig) in (menuConfig.configs ?? []).enumerated() {
|
||||
for subConfig in menuConfig.configs ?? [] {
|
||||
if subConfig.name == "Show log File…" && ProcessInfo.processInfo.environment["MPVBUNDLE"] != "true" {
|
||||
continue
|
||||
}
|
||||
@ -271,11 +268,13 @@ class MenuBar: NSObject {
|
||||
subItem.keyEquivalentModifierMask = subConfig.modifiers
|
||||
subItem.config = subConfig
|
||||
menu.addItem(subItem)
|
||||
menuConfigs[menuConfigIndex].configs?[subConfigIndex].menuItem = subItem
|
||||
|
||||
if subConfig.name == "Services" {
|
||||
subItem.submenu = NSApp.servicesMenu
|
||||
}
|
||||
if let cmd = subConfig.commandSpecial {
|
||||
dynamicMenuItems[cmd] = (dynamicMenuItems[cmd] ?? []) + [subItem]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -399,13 +398,8 @@ class MenuBar: NSObject {
|
||||
}
|
||||
|
||||
func register(_ selector: Selector, key: MenuKey) {
|
||||
for menuConfig in menuConfigs {
|
||||
for subConfig in menuConfig.configs ?? [] {
|
||||
if subConfig.commandSpecial == key {
|
||||
subConfig.menuItem?.action = selector
|
||||
return
|
||||
}
|
||||
}
|
||||
for menuItem in dynamicMenuItems[key] ?? [] {
|
||||
menuItem.action = selector
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user