Skip to content

Commit

Permalink
iPad: when creating a new window, take over and close the previous one
Browse files Browse the repository at this point in the history
  • Loading branch information
zydeco committed Mar 4, 2024
1 parent 19c0072 commit fdbf6aa
Showing 1 changed file with 20 additions and 5 deletions.
25 changes: 20 additions & 5 deletions Mini vMac/DefaultSceneDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import UIKit

class DefaultSceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
var window: UIWindow? // keep window reference to be able to set background colour before destroying

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else {
Expand All @@ -24,17 +24,32 @@ class DefaultSceneDelegate: UIResponder, UIWindowSceneDelegate {
windowScene.sizeRestrictions?.maximumSize = size

window = UIWindow(windowScene: windowScene)
let rootViewController = appDelegate.window?.rootViewController ?? UIStoryboard(name: "Main", bundle: .main).instantiateInitialViewController()

if let window {
appDelegate.window = window
window.rootViewController = rootViewController
window.rootViewController = UIStoryboard(name: "Main", bundle: .main).instantiateInitialViewController()
window.makeKeyAndVisible()
}
self.destroyOtherSessions(not: session)
}

private func destroyOtherSessions(not session: UISceneSession) {
let app = UIApplication.shared
let options = UIWindowSceneDestructionRequestOptions()
options.windowDismissalAnimation = .decline
for otherSession in app.openSessions.filter({ $0 != session && $0.configuration.name == "Default"}) {
if let window = (otherSession.scene as? UIWindowScene)?.windows.first {
window.rootViewController?.view.removeFromSuperview()
window.backgroundColor = .darkGray
app.requestSceneSessionRefresh(otherSession)
}
app.requestSceneSessionDestruction(otherSession, options: options)
// window will remain visible until window switcher is dismissed!
}
}

func sceneDidEnterBackground(_ scene: UIScene) {
if UserDefaults.standard.bool(forKey: "runInBackground") == false {
let app = UIApplication.shared
if UserDefaults.standard.bool(forKey: "runInBackground") == false && app.connectedScenes.filter({ $0 != scene && $0.session.configuration.name == "Default"}).isEmpty {
AppDelegate.emulator.isRunning = false
}
}
Expand Down

0 comments on commit fdbf6aa

Please sign in to comment.