diff options
author | der richter <der.richter@gmx.de> | 2024-03-04 00:00:42 +0100 |
---|---|---|
committer | der richter <der.richter@gmx.de> | 2024-03-07 01:03:52 +0100 |
commit | 73e494a237939bc71632834f2d237034a10a665d (patch) | |
tree | 8bc7837b324371593bd52d8d1d2760b227254f46 | |
parent | 8d4329a7101a8128edec62eede452c1aa61b37bf (diff) | |
download | mpv-73e494a237939bc71632834f2d237034a10a665d.tar.bz2 mpv-73e494a237939bc71632834f2d237034a10a665d.tar.xz |
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.
-rw-r--r-- | osdep/mac/menu_bar.swift | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/osdep/mac/menu_bar.swift b/osdep/mac/menu_bar.swift index 2ba04b0f33..6fa64b43ca 100644 --- a/osdep/mac/menu_bar.swift +++ b/osdep/mac/menu_bar.swift @@ -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 } } } |