mirror of
https://github.com/mpv-player/mpv
synced 2025-02-16 20:27:23 +00:00
mac: fix traditional fullscreen on macOS 11
the fullscreen style mask is not supported on macOS 11 anymore outside of the native fullscreen animation. this can lead to a none working fs or in the worst case a crash. to fix this we will simulate a fullscreen window with a borderless window with the size of the whole screen, though only on macOS 11. Fixes #8490
This commit is contained in:
parent
c2868bdd39
commit
d1be8bb606
@ -132,11 +132,11 @@ class CocoaCB: Common {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override func windowSetToFullScreen() {
|
override func windowSetToFullScreen() {
|
||||||
layer?.update()
|
layer?.update(force: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func windowSetToWindow() {
|
override func windowSetToWindow() {
|
||||||
layer?.update()
|
layer?.update(force: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func windowDidUpdateFrame() {
|
override func windowDidUpdateFrame() {
|
||||||
|
@ -30,6 +30,7 @@ class Window: NSWindow, NSWindowDelegate {
|
|||||||
var isInFullscreen: Bool = false
|
var isInFullscreen: Bool = false
|
||||||
var isAnimating: Bool = false
|
var isAnimating: Bool = false
|
||||||
var isMoving: Bool = false
|
var isMoving: Bool = false
|
||||||
|
var previousStyleMask: NSWindow.StyleMask = [.titled, .closable, .miniaturizable, .resizable]
|
||||||
|
|
||||||
var unfsContentFramePixel: NSRect { get { return convertToBacking(unfsContentFrame ?? NSRect(x: 0, y: 0, width: 160, height: 90)) } }
|
var unfsContentFramePixel: NSRect { get { return convertToBacking(unfsContentFrame ?? NSRect(x: 0, y: 0, width: 160, height: 90)) } }
|
||||||
var framePixel: NSRect { get { return convertToBacking(frame) } }
|
var framePixel: NSRect { get { return convertToBacking(frame) } }
|
||||||
@ -60,6 +61,7 @@ class Window: NSWindow, NSWindowDelegate {
|
|||||||
set {
|
set {
|
||||||
let responder = firstResponder
|
let responder = firstResponder
|
||||||
let windowTitle = title
|
let windowTitle = title
|
||||||
|
previousStyleMask = super.styleMask
|
||||||
super.styleMask = newValue
|
super.styleMask = newValue
|
||||||
makeFirstResponder(responder)
|
makeFirstResponder(responder)
|
||||||
title = windowTitle
|
title = windowTitle
|
||||||
@ -228,7 +230,14 @@ class Window: NSWindow, NSWindowDelegate {
|
|||||||
|
|
||||||
func setToFullScreen() {
|
func setToFullScreen() {
|
||||||
guard let targetFrame = targetScreen?.frame else { return }
|
guard let targetFrame = targetScreen?.frame else { return }
|
||||||
styleMask.insert(.fullScreen)
|
|
||||||
|
if #available(macOS 11.0, *) {
|
||||||
|
styleMask = .borderless
|
||||||
|
common.titleBar?.hide(0.0)
|
||||||
|
} else {
|
||||||
|
styleMask.insert(.fullScreen)
|
||||||
|
}
|
||||||
|
|
||||||
NSApp.presentationOptions = [.autoHideMenuBar, .autoHideDock]
|
NSApp.presentationOptions = [.autoHideMenuBar, .autoHideDock]
|
||||||
setFrame(targetFrame, display: true)
|
setFrame(targetFrame, display: true)
|
||||||
endAnimation()
|
endAnimation()
|
||||||
@ -239,10 +248,17 @@ class Window: NSWindow, NSWindowDelegate {
|
|||||||
|
|
||||||
func setToWindow() {
|
func setToWindow() {
|
||||||
guard let tScreen = targetScreen else { return }
|
guard let tScreen = targetScreen else { return }
|
||||||
|
|
||||||
|
if #available(macOS 11.0, *) {
|
||||||
|
styleMask = previousStyleMask
|
||||||
|
common.titleBar?.hide(0.0)
|
||||||
|
} else {
|
||||||
|
styleMask.remove(.fullScreen)
|
||||||
|
}
|
||||||
|
|
||||||
let newFrame = calculateWindowPosition(for: tScreen, withoutBounds: targetScreen == screen)
|
let newFrame = calculateWindowPosition(for: tScreen, withoutBounds: targetScreen == screen)
|
||||||
NSApp.presentationOptions = []
|
NSApp.presentationOptions = []
|
||||||
setFrame(newFrame, display: true)
|
setFrame(newFrame, display: true)
|
||||||
styleMask.remove(.fullScreen)
|
|
||||||
endAnimation()
|
endAnimation()
|
||||||
isInFullscreen = false
|
isInFullscreen = false
|
||||||
mpv?.setOption(fullscreen: isInFullscreen)
|
mpv?.setOption(fullscreen: isInFullscreen)
|
||||||
|
Loading…
Reference in New Issue
Block a user