Skip to content

Commit 25296a7

Browse files
committed
Workaround for Sequoia launch behavior
1 parent 2397553 commit 25296a7

File tree

2 files changed

+21
-43
lines changed

2 files changed

+21
-43
lines changed

Ice/Main/AppDelegate.swift

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,27 +41,24 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
4141
}
4242
}
4343

44-
// On macOS 15, the windows handle their own closure. If on macOS 14,
45-
// close them here.
46-
//
47-
// NOTE: The windows might not close when running from Xcode, but it
48-
// does work when running standalone.
49-
if #unavailable(macOS 15.0) {
44+
// Temporary hack to make sure the window opens on Sequoia is to
45+
// let them open, wait a bit, then close them.
46+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
5047
appState.settingsWindow?.close()
5148
appState.permissionsWindow?.close()
52-
}
5349

54-
if !appState.isPreview {
55-
// If we have the required permissions, set up the shared app state.
56-
// Otherwise, open the permissions window.
57-
if appState.permissionsManager.hasPermission {
58-
appState.performSetup()
59-
} else if let permissionsWindow = appState.permissionsWindow {
60-
appState.activate(withPolicy: .regular)
61-
permissionsWindow.center()
62-
permissionsWindow.makeKeyAndOrderFront(nil)
63-
} else {
64-
Logger.appDelegate.error("Failed to open permissions window")
50+
if !appState.isPreview {
51+
// If we have the required permissions, set up the shared app state.
52+
// Otherwise, open the permissions window.
53+
if appState.permissionsManager.hasPermission {
54+
appState.performSetup()
55+
} else if let permissionsWindow = appState.permissionsWindow {
56+
appState.activate(withPolicy: .regular)
57+
permissionsWindow.center()
58+
permissionsWindow.makeKeyAndOrderFront(nil)
59+
} else {
60+
Logger.appDelegate.error("Failed to open permissions window")
61+
}
6562
}
6663
}
6764
}

Ice/Settings/SettingsWindow.swift

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import SwiftUI
77

88
struct SettingsWindow: Scene {
99
@ObservedObject var appState: AppState
10+
@Environment(\.openWindow) private var openWindow
1011

1112
var body: some Scene {
1213
settingsWindow
@@ -19,18 +20,15 @@ struct SettingsWindow: Scene {
1920

2021
private var settingsWindow: some Scene {
2122
if #available(macOS 15.0, *) {
22-
return SettingsWindowMacOS15()
23+
return window
24+
.defaultLaunchBehavior(.presented)
2325
} else {
24-
return SettingsWindowMacOS14()
26+
return window
2527
}
2628
}
27-
}
28-
29-
@available(macOS 14.0, *)
30-
private struct SettingsWindowMacOS14: Scene {
31-
@Environment(\.openWindow) private var openWindow
3229

33-
var body: some Scene {
30+
@SceneBuilder
31+
private var window: some Scene {
3432
Window(Constants.settingsWindowTitle, id: Constants.settingsWindowID) {
3533
SettingsView()
3634
.once {
@@ -39,20 +37,3 @@ private struct SettingsWindowMacOS14: Scene {
3937
}
4038
}
4139
}
42-
43-
@available(macOS 15.0, *)
44-
private struct SettingsWindowMacOS15: Scene {
45-
@Environment(\.dismissWindow) private var dismissWindow
46-
@State private var launchBehavior: SceneLaunchBehavior = .presented
47-
48-
var body: some Scene {
49-
Window(Constants.settingsWindowTitle, id: Constants.settingsWindowID) {
50-
SettingsView()
51-
.once {
52-
dismissWindow(id: Constants.settingsWindowID)
53-
launchBehavior = .suppressed // Keep the window from reopening.
54-
}
55-
}
56-
.defaultLaunchBehavior(launchBehavior)
57-
}
58-
}

0 commit comments

Comments
 (0)