From 73e494a237939bc71632834f2d237034a10a665d Mon Sep 17 00:00:00 2001 From: der richter Date: Mon, 4 Mar 2024 00:00:42 +0100 Subject: 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. --- osdep/mac/menu_bar.swift | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) (limited to 'osdep/mac') 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 } } } -- cgit v1.2.3