summaryrefslogtreecommitdiffstats
path: root/video/out
diff options
context:
space:
mode:
authorder richter <der.richter@gmx.de>2020-12-05 15:09:32 +0100
committerDudemanguy <random342@airmail.cc>2020-12-06 17:36:43 +0000
commit96bcf51c3907ca04a2f553e71d3ac7dea5ebeb06 (patch)
tree8724e123d48e60c658502e15978cc214441881fa /video/out
parenta700b8130bfc06de3b1fb14e136e396423923ed3 (diff)
downloadmpv-96bcf51c3907ca04a2f553e71d3ac7dea5ebeb06.tar.bz2
mpv-96bcf51c3907ca04a2f553e71d3ac7dea5ebeb06.tar.xz
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.
Diffstat (limited to 'video/out')
-rw-r--r--video/out/cocoa_cb_common.swift3
-rw-r--r--video/out/mac/common.swift27
2 files changed, 23 insertions, 7 deletions
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<vo>) {
- 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<vo>) {
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)
}