mac/apphub: move menu bar into AppHub

This commit is contained in:
der richter 2024-03-26 20:16:42 +01:00
parent e2bc1e5f9b
commit 1bc680d32a
5 changed files with 16 additions and 18 deletions

View File

@ -21,6 +21,7 @@ class AppHub: NSObject {
var mpv: OpaquePointer? var mpv: OpaquePointer?
@objc var input: InputHelper @objc var input: InputHelper
var event: EventHelper? var event: EventHelper?
var menu: MenuBar?
#if HAVE_MACOS_MEDIA_PLAYER #if HAVE_MACOS_MEDIA_PLAYER
var remote: RemoteCommandCenter? var remote: RemoteCommandCenter?
#endif #endif
@ -33,6 +34,7 @@ class AppHub: NSObject {
private override init() { private override init() {
input = InputHelper() input = InputHelper()
super.init() super.init()
if isApplication { menu = MenuBar(self) }
#if HAVE_MACOS_MEDIA_PLAYER #if HAVE_MACOS_MEDIA_PLAYER
remote = RemoteCommandCenter(self) remote = RemoteCommandCenter(self)
#endif #endif

View File

@ -58,7 +58,6 @@ static void terminate_cocoa_application(void)
} }
@implementation Application @implementation Application
@synthesize menuBar = _menu_bar;
@synthesize openCount = _open_count; @synthesize openCount = _open_count;
@synthesize cocoaCB = _cocoa_cb; @synthesize cocoaCB = _cocoa_cb;
@ -183,7 +182,6 @@ static void init_cocoa_application(bool regular)
{ {
NSApp = mpv_shared_app(); NSApp = mpv_shared_app();
[NSApp setDelegate:NSApp]; [NSApp setDelegate:NSApp];
[NSApp setMenuBar:[[MenuBar alloc] init]];
// Will be set to Regular from cocoa_common during UI creation so that we // Will be set to Regular from cocoa_common during UI creation so that we
// don't create an icon when playing audio only files. // don't create an icon when playing audio only files.

View File

@ -19,7 +19,6 @@
#include "osdep/mac/application.h" #include "osdep/mac/application.h"
@class CocoaCB; @class CocoaCB;
@class MenuBar;
struct mpv_event; struct mpv_event;
struct mpv_handle; struct mpv_handle;
@ -27,7 +26,6 @@ struct mpv_handle;
- (void)initCocoaCb:(struct mpv_handle *)ctx; - (void)initCocoaCb:(struct mpv_handle *)ctx;
@property(nonatomic, retain) MenuBar *menuBar;
@property(nonatomic, assign) size_t openCount; @property(nonatomic, assign) size_t openCount;
@property(nonatomic, retain) CocoaCB *cocoaCB; @property(nonatomic, retain) CocoaCB *cocoaCB;
@end @end

View File

@ -68,18 +68,20 @@ extension MenuBar {
} }
class MenuBar: NSObject { class MenuBar: NSObject {
unowned let appHub: AppHub
let mainMenu = NSMenu(title: "Main") let mainMenu = NSMenu(title: "Main")
let servicesMenu = NSMenu(title: "Services") let servicesMenu = NSMenu(title: "Services")
var menuConfigs: [Config] = [] var menuConfigs: [Config] = []
var dynamicMenuItems: [Type:[MenuItem]] = [:] var dynamicMenuItems: [Type:[MenuItem]] = [:]
let appIcon: NSImage let appIcon: NSImage
@objc override init() { @objc init(_ appHub: AppHub) {
self.appHub = appHub
UserDefaults.standard.set(false, forKey: "NSFullScreenMenuItemEverywhere") UserDefaults.standard.set(false, forKey: "NSFullScreenMenuItemEverywhere")
UserDefaults.standard.set(true, forKey: "NSDisabledDictationMenuItem") UserDefaults.standard.set(true, forKey: "NSDisabledDictationMenuItem")
UserDefaults.standard.set(true, forKey: "NSDisabledCharacterPaletteMenuItem") UserDefaults.standard.set(true, forKey: "NSDisabledCharacterPaletteMenuItem")
NSWindow.allowsAutomaticWindowTabbing = false NSWindow.allowsAutomaticWindowTabbing = false
appIcon = AppHub.shared.getIcon() appIcon = appHub.getIcon()
super.init() super.init()
@ -318,7 +320,7 @@ class MenuBar: NSObject {
@objc func quit(_ menuItem: MenuItem) { @objc func quit(_ menuItem: MenuItem) {
guard let menuConfig = menuItem.config else { return } guard let menuConfig = menuItem.config else { return }
AppHub.shared.input.command(menuConfig.command) appHub.input.command(menuConfig.command)
} }
@objc func openFiles() { @objc func openFiles() {
@ -327,7 +329,7 @@ class MenuBar: NSObject {
panel.canChooseDirectories = true panel.canChooseDirectories = true
if panel.runModal() == .OK { if panel.runModal() == .OK {
AppHub.shared.input.open(files: panel.urls.map { $0.path }) appHub.input.open(files: panel.urls.map { $0.path })
} }
} }
@ -335,7 +337,7 @@ class MenuBar: NSObject {
let panel = NSOpenPanel() let panel = NSOpenPanel()
if panel.runModal() == .OK, let url = panel.urls.first { if panel.runModal() == .OK, let url = panel.urls.first {
AppHub.shared.input.command("loadlist \"\(url.path)\"") appHub.input.command("loadlist \"\(url.path)\"")
} }
} }
@ -355,13 +357,13 @@ class MenuBar: NSObject {
} }
if alert.runModal() == .alertFirstButtonReturn && input.stringValue.count > 0 { if alert.runModal() == .alertFirstButtonReturn && input.stringValue.count > 0 {
AppHub.shared.input.open(files: [input.stringValue]) appHub.input.open(files: [input.stringValue])
} }
} }
@objc func command(_ menuItem: MenuItem) { @objc func command(_ menuItem: MenuItem) {
guard let menuConfig = menuItem.config else { return } guard let menuConfig = menuItem.config else { return }
AppHub.shared.input.command(menuConfig.command) appHub.input.command(menuConfig.command)
} }
@objc func url(_ menuItem: MenuItem) { @objc func url(_ menuItem: MenuItem) {

View File

@ -105,13 +105,11 @@ class Window: NSWindow, NSWindowDelegate {
currentScreen = screen currentScreen = screen
unfScreen = screen unfScreen = screen
if let app = NSApp as? Application { AppHub.shared.menu?.register(#selector(setHalfWindowSize), key: .itemHalfSize)
app.menuBar.register(#selector(setHalfWindowSize), key: .itemHalfSize) AppHub.shared.menu?.register(#selector(setNormalWindowSize), key: .itemNormalSize)
app.menuBar.register(#selector(setNormalWindowSize), key: .itemNormalSize) AppHub.shared.menu?.register(#selector(setDoubleWindowSize), key: .itemDoubleSize)
app.menuBar.register(#selector(setDoubleWindowSize), key: .itemDoubleSize) AppHub.shared.menu?.register(#selector(performMiniaturize(_:)), key: .itemMinimize)
app.menuBar.register(#selector(performMiniaturize(_:)), key: .itemMinimize) AppHub.shared.menu?.register(#selector(performZoom(_:)), key: .itemZoom)
app.menuBar.register(#selector(performZoom(_:)), key: .itemZoom)
}
} }
override func toggleFullScreen(_ sender: Any?) { override func toggleFullScreen(_ sender: Any?) {