summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorder richter <der.richter@gmx.de>2024-03-03 22:28:48 +0100
committerder richter <der.richter@gmx.de>2024-03-07 01:03:52 +0100
commit30eab4b9334720e0fccc44a486984b34fe06a3db (patch)
tree3c3789a635549c2a631960cff67a021140739359
parent95d08df7a7ea9dde5f4f6ecf32da97d29d9a7fed (diff)
downloadmpv-30eab4b9334720e0fccc44a486984b34fe06a3db.tar.bz2
mpv-30eab4b9334720e0fccc44a486984b34fe06a3db.tar.xz
mac/menu: attach menu config to menu item for direct access
add a config property to the menu items, so we don't need to search in the config array for the right config.
-rw-r--r--osdep/mac/menu_bar.swift48
1 files changed, 21 insertions, 27 deletions
diff --git a/osdep/mac/menu_bar.swift b/osdep/mac/menu_bar.swift
index 6e322f346a..37e6a7783c 100644
--- a/osdep/mac/menu_bar.swift
+++ b/osdep/mac/menu_bar.swift
@@ -16,6 +16,10 @@
*/
extension MenuBar {
+ class MenuItem: NSMenuItem {
+ var config: Config?
+ }
+
enum MenuKey {
case normalSize
case halfSize
@@ -34,7 +38,7 @@ extension MenuBar {
let url: String?
let file: String?
let commandSpecial: MenuKey?
- var menuItem: NSMenuItem?
+ var menuItem: MenuItem?
var configs: [Config]?
init(
@@ -47,7 +51,7 @@ extension MenuBar {
url: String? = nil,
file: String? = nil,
commandSpecial: MenuKey? = nil,
- menuItem: NSMenuItem? = nil,
+ menuItem: MenuItem? = nil,
configs: [Config]? = nil
) {
self.name = name
@@ -251,7 +255,8 @@ class MenuBar: NSObject {
for (menuConfigIndex, menuConfig) in menuConfigs.enumerated() {
let menu = NSMenu(title: menuConfig.name)
- let item = NSMenuItem(title: menuConfig.name, action: nil, keyEquivalent: menuConfig.key)
+ 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
@@ -262,11 +267,12 @@ class MenuBar: NSObject {
}
if subConfig.name == "separator" {
- menu.addItem(NSMenuItem.separator())
+ menu.addItem(MenuItem.separator())
} else {
- let subItem = NSMenuItem(title: subConfig.name, action: subConfig.action, keyEquivalent: subConfig.key)
+ let subItem = MenuItem(title: subConfig.name, action: subConfig.action, keyEquivalent: subConfig.key)
subItem.target = subConfig.target
subItem.keyEquivalentModifierMask = subConfig.modifiers
+ subItem.config = subConfig
menu.addItem(subItem)
menuConfigs[menuConfigIndex].configs?[subConfigIndex].menuItem = subItem
@@ -289,8 +295,8 @@ class MenuBar: NSObject {
])
}
- @objc func settings(_ menuItem: NSMenuItem) {
- guard let menuConfig = getConfigFromMenu(menuItem: menuItem),
+ @objc func settings(_ menuItem: MenuItem) {
+ guard let menuConfig = menuItem.config,
let fileName = menuConfig.file else { return }
let configPaths: [URL] = [
URL(fileURLWithPath: NSHomeDirectory() + "/.config/mpv/", isDirectory: true),
@@ -316,8 +322,8 @@ class MenuBar: NSObject {
}
}
- @objc func quit(_ menuItem: NSMenuItem) {
- guard let menuConfig = getConfigFromMenu(menuItem: menuItem) else { return }
+ @objc func quit(_ menuItem: MenuItem) {
+ guard let menuConfig = menuItem.config else { return }
menuConfig.command.withCString {
(NSApp as? Application)?.stopMPV(UnsafeMutablePointer<CChar>(mutating: $0))
}
@@ -363,21 +369,21 @@ class MenuBar: NSObject {
}
}
- @objc func command(_ menuItem: NSMenuItem) {
- guard let menuConfig = getConfigFromMenu(menuItem: menuItem) else { return }
+ @objc func command(_ menuItem: MenuItem) {
+ guard let menuConfig = menuItem.config else { return }
menuConfig.command.withCString {
EventsResponder.sharedInstance().queueCommand(UnsafeMutablePointer<CChar>(mutating: $0))
}
}
- @objc func url(_ menuItem: NSMenuItem) {
- guard let menuConfig = getConfigFromMenu(menuItem: menuItem),
+ @objc func url(_ menuItem: MenuItem) {
+ guard let menuConfig = menuItem.config,
let url = URL(string: menuConfig.url ?? "") else { return }
NSWorkspace.shared.open(url)
}
- @objc func showFile(_ menuItem: NSMenuItem) {
- guard let menuConfig = getConfigFromMenu(menuItem: menuItem) else { return }
+ @objc func showFile(_ menuItem: MenuItem) {
+ guard let menuConfig = menuItem.config else { return }
let url = URL(fileURLWithPath: menuConfig.file ?? "")
if FileManager.default.fileExists(atPath: url.path) {
NSWorkspace.shared.activateFileViewerSelecting([url])
@@ -396,18 +402,6 @@ class MenuBar: NSObject {
alert.runModal()
}
- func getConfigFromMenu(menuItem: NSMenuItem) -> Config? {
- for menuConfig in menuConfigs {
- for subConfig in menuConfig.configs ?? [] {
- if subConfig.menuItem == menuItem {
- return subConfig
- }
- }
- }
-
- return nil
- }
-
func register(_ selector: Selector, key: MenuKey) {
for menuConfig in menuConfigs {
for subConfig in menuConfig.configs ?? [] {