summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorder richter <der.richter@gmx.de>2024-03-04 00:00:42 +0100
committerder richter <der.richter@gmx.de>2024-03-07 01:03:52 +0100
commit73e494a237939bc71632834f2d237034a10a665d (patch)
tree8bc7837b324371593bd52d8d1d2760b227254f46
parent8d4329a7101a8128edec62eede452c1aa61b37bf (diff)
downloadmpv-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.swift22
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
}
}
}