mirror of
				https://github.com/yattee/yattee.git
				synced 2025-10-31 12:41:57 +00:00 
			
		
		
		
	Fix PiP close on Mac
This commit is contained in:
		| @@ -31,7 +31,9 @@ final class PiPDelegate: NSObject, AVPictureInPictureControllerDelegate { | ||||
|         player.controls.objectWillChange.send() | ||||
|     } | ||||
|  | ||||
|     func pictureInPictureControllerWillStopPictureInPicture(_: AVPictureInPictureController) {} | ||||
|     func pictureInPictureControllerWillStopPictureInPicture(_: AVPictureInPictureController) { | ||||
|         player.show() | ||||
|     } | ||||
|  | ||||
|     func pictureInPictureController( | ||||
|         _: AVPictureInPictureController, | ||||
|   | ||||
| @@ -143,14 +143,12 @@ import SwiftUI | ||||
|     } | ||||
| #else | ||||
|     struct AppleAVPlayerView: NSViewRepresentable { | ||||
|         @State private var pictureInPictureDelegate = MacOSPiPDelegate() | ||||
|  | ||||
|         func makeNSView(context _: Context) -> some NSView { | ||||
|             let view = AVPlayerView() | ||||
|             view.player = PlayerModel.shared.avPlayerBackend.avPlayer | ||||
|             view.showsFullScreenToggleButton = true | ||||
|             view.allowsPictureInPicturePlayback = true | ||||
|             view.pictureInPictureDelegate = pictureInPictureDelegate | ||||
|             view.pictureInPictureDelegate = MacOSPiPDelegate.shared | ||||
|             return view | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -28,6 +28,7 @@ struct PlayerBackendView: View { | ||||
|                                 { | ||||
|                                     AppleAVPlayerView() | ||||
|                                 } else if !avPlayerUsesSystemControls || | ||||
|                                     player.playingInPictureInPicture || | ||||
|                                     player.avPlayerBackend.isStartingPiP | ||||
|                                 { | ||||
|                                     AppleAVPlayerLayerView() | ||||
|   | ||||
| @@ -2,6 +2,8 @@ import AVKit | ||||
| import Foundation | ||||
|  | ||||
| final class MacOSPiPDelegate: NSObject, AVPlayerViewPictureInPictureDelegate { | ||||
|     static let shared = MacOSPiPDelegate() | ||||
|  | ||||
|     var playerModel: PlayerModel { .shared } | ||||
|  | ||||
|     func playerViewShouldAutomaticallyDismissAtPicture(inPictureStart _: AVPlayerView) -> Bool { | ||||
| @@ -16,19 +18,14 @@ final class MacOSPiPDelegate: NSObject, AVPlayerViewPictureInPictureDelegate { | ||||
|     } | ||||
|  | ||||
|     func playerViewWillStopPicture(inPicture _: AVPlayerView) { | ||||
|         DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { [weak self] in | ||||
|             self?.playerModel.playingInPictureInPicture = false | ||||
|             self?.playerModel.show() | ||||
|         } | ||||
|         playerModel.show() | ||||
|         playerModel.playingInPictureInPicture = false | ||||
|     } | ||||
|  | ||||
|     func playerView( | ||||
|         _: AVPlayerView, | ||||
|         restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: (Bool) -> Void | ||||
|     ) { | ||||
|         DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { [weak self] in | ||||
|             self?.playerModel.show() | ||||
|         } | ||||
|         completionHandler(true) | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Arkadiusz Fal
					Arkadiusz Fal