From 96bcf51c3907ca04a2f553e71d3ac7dea5ebeb06 Mon Sep 17 00:00:00 2001 From: der richter Date: Sat, 5 Dec 2020 15:09:32 +0100 Subject: mac: support screen-name and fs-screen-name opts the screen-name and fs-screen-name option allow for specifying screens based on their name. this is the name of the NSScreen and also reported by the VOCTRL_GET_DISPLAY_NAMES event. the old screen and fs-screen options by id, respectively, are preferred over these new ones. --- video/out/cocoa_cb_common.swift | 3 +-- video/out/mac/common.swift | 27 ++++++++++++++++++++++----- 2 files changed, 23 insertions(+), 7 deletions(-) (limited to 'video') diff --git a/video/out/cocoa_cb_common.swift b/video/out/cocoa_cb_common.swift index 476b4820bc..8dd76f4bc5 100644 --- a/video/out/cocoa_cb_common.swift +++ b/video/out/cocoa_cb_common.swift @@ -83,8 +83,7 @@ class CocoaCB: Common { } func updateWindowSize(_ vo: UnsafeMutablePointer) { - guard let opts: mp_vo_opts = mpv?.opts, - let targetScreen = getScreenBy(id: Int(opts.screen_id)) ?? NSScreen.main else + guard let targetScreen = getTargetScreen(forFullscreen: false) ?? NSScreen.main else { log.sendWarning("Couldn't update Window size, no Screen available") return diff --git a/video/out/mac/common.swift b/video/out/mac/common.swift index cb1b74b196..e3f1405c02 100644 --- a/video/out/mac/common.swift +++ b/video/out/mac/common.swift @@ -186,8 +186,7 @@ class Common: NSObject { func startDisplayLink(_ vo: UnsafeMutablePointer) { CVDisplayLinkCreateWithActiveCGDisplays(&link) - guard let opts: mp_vo_opts = mpv?.opts, - let screen = getScreenBy(id: Int(opts.screen_id)) ?? NSScreen.main, + guard let screen = getTargetScreen(forFullscreen: false) ?? NSScreen.main, let link = self.link else { log.sendWarning("Couldn't start DisplayLink, no MPVHelper, Screen or DisplayLink available") @@ -409,9 +408,27 @@ class Common: NSObject { return NSScreen.screens[screenID] } + func getScreenBy(name screenName: String?) -> NSScreen? { + for screen in NSScreen.screens { + if screen.displayName == screenName { + return screen + } + } + return nil + } + func getTargetScreen(forFullscreen fs: Bool) -> NSScreen? { - let screenID = fs ? (mpv?.opts.fsscreen_id ?? 0) : (mpv?.opts.screen_id ?? 0) - return getScreenBy(id: Int(screenID)) + guard let mpv = mpv else { + log.sendWarning("Unexpected nil value in getTargetScreen") + return nil + } + + let screenID = fs ? mpv.opts.fsscreen_id : mpv.opts.screen_id + var name: String? + if let screenName = fs ? mpv.opts.fsscreen_name : mpv.opts.screen_name { + name = String(cString: screenName) + } + return getScreenBy(id: Int(screenID)) ?? getScreenBy(name: name) } func getCurrentScreen() -> NSScreen? { @@ -446,7 +463,7 @@ class Common: NSObject { log.sendError("Something went wrong, no MPVHelper was initialized") exit(1) } - guard let targetScreen = getScreenBy(id: Int(mpv.opts.screen_id)) ?? NSScreen.main else { + guard let targetScreen = getTargetScreen(forFullscreen: false) ?? NSScreen.main else { log.sendError("Something went wrong, no Screen was found") exit(1) } -- cgit v1.2.3