diff --git a/osdep/mac/app_hub.swift b/osdep/mac/app_hub.swift index d5b0827be3..a668948603 100644 --- a/osdep/mac/app_hub.swift +++ b/osdep/mac/app_hub.swift @@ -39,8 +39,9 @@ class AppHub: NSObject { } @objc func initMpv(_ mpv: OpaquePointer) { - self.mpv = mpv - event = EventHelper(mpv) + event = EventHelper(self, mpv) + self.mpv = event?.mpv + #if HAVE_MACOS_MEDIA_PLAYER remote?.registerEvents() #endif @@ -54,7 +55,7 @@ class AppHub: NSObject { } @objc func initCocoaCb() { - guard let app = NSApp as? Application else { return } + guard let app = NSApp as? Application, let mpv = mpv else { return } DispatchQueue.main.sync { app.initCocoaCb(mpv) } } diff --git a/osdep/mac/event_helper.swift b/osdep/mac/event_helper.swift index f0b2bf42b1..003f04e766 100644 --- a/osdep/mac/event_helper.swift +++ b/osdep/mac/event_helper.swift @@ -58,10 +58,17 @@ extension EventHelper { } public class EventHelper: NSObject { + unowned let appHub: AppHub var mpv: OpaquePointer? var events: [String:[Int:EventSubscriber]] = [:] - @objc init(_ mpvHandle: OpaquePointer) { + @objc init?(_ appHub: AppHub, _ mpvHandle: OpaquePointer) { + if !appHub.isApplication { + mpv_destroy(mpvHandle) + return nil + } + + self.appHub = appHub self.mpv = mpvHandle super.init() mpv_set_wakeup_callback(mpvHandle, wakeup, TypeHelper.bridge(obj: self))