fix: preview tear down fix

This commit is contained in:
Michael Freno
2026-01-17 21:54:08 -05:00
parent 03bd4ea9e7
commit ab7811aebd
4 changed files with 24 additions and 31 deletions

View File

@@ -11,8 +11,15 @@ import SwiftUI
enum PreviewWindowHelper { enum PreviewWindowHelper {
static func showPreview<Content: View>( static func showPreview<Content: View>(
on screen: NSScreen, on screen: NSScreen,
content: Content content: @escaping (@escaping () -> Void) -> Content
) -> NSWindowController { ) {
var controller: NSWindowController?
let dismiss: () -> Void = {
controller?.window?.close()
controller = nil
}
let panel = NSPanel( let panel = NSPanel(
contentRect: screen.frame, contentRect: screen.frame,
styleMask: [.borderless, .nonactivatingPanel], styleMask: [.borderless, .nonactivatingPanel],
@@ -25,11 +32,10 @@ enum PreviewWindowHelper {
panel.hasShadow = false panel.hasShadow = false
panel.ignoresMouseEvents = false panel.ignoresMouseEvents = false
panel.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary] panel.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
panel.contentView = NSHostingView(rootView: content) panel.contentView = NSHostingView(rootView: content(dismiss))
panel.setFrame(screen.frame, display: true) panel.setFrame(screen.frame, display: true)
let controller = NSWindowController(window: panel) controller = NSWindowController(window: panel)
controller.showWindow(nil) controller?.showWindow(nil)
return controller
} }
} }

View File

@@ -10,7 +10,6 @@ import SwiftUI
struct BlinkSetupView: View { struct BlinkSetupView: View {
@Bindable var settingsManager: SettingsManager @Bindable var settingsManager: SettingsManager
@State private var previewWindowController: NSWindowController?
var body: some View { var body: some View {
VStack(spacing: 0) { VStack(spacing: 0) {
@@ -123,14 +122,10 @@ struct BlinkSetupView: View {
private func showPreviewWindow() { private func showPreviewWindow() {
guard let screen = NSScreen.main else { return } guard let screen = NSScreen.main else { return }
previewWindowController = PreviewWindowHelper.showPreview( let sizePercentage = settingsManager.settings.subtleReminderSize.percentage
on: screen, PreviewWindowHelper.showPreview(on: screen) { dismiss in
content: BlinkReminderView( BlinkReminderView(sizePercentage: sizePercentage, onDismiss: dismiss)
sizePercentage: settingsManager.settings.subtleReminderSize.percentage }
) { [weak previewWindowController] in
previewWindowController?.window?.close()
}
)
} }
} }

View File

@@ -10,7 +10,6 @@ import SwiftUI
struct LookAwaySetupView: View { struct LookAwaySetupView: View {
@Bindable var settingsManager: SettingsManager @Bindable var settingsManager: SettingsManager
@State private var previewWindowController: NSWindowController?
var cameraAccess = CameraAccessService.shared var cameraAccess = CameraAccessService.shared
@State private var failedCameraAccess = false @State private var failedCameraAccess = false
@@ -78,12 +77,10 @@ struct LookAwaySetupView: View {
private func showPreviewWindow() { private func showPreviewWindow() {
guard let screen = NSScreen.main else { return } guard let screen = NSScreen.main else { return }
previewWindowController = PreviewWindowHelper.showPreview( let countdownSeconds = settingsManager.settings.lookAwayCountdownSeconds
on: screen, PreviewWindowHelper.showPreview(on: screen) { dismiss in
content: LookAwayReminderView(countdownSeconds: settingsManager.settings.lookAwayCountdownSeconds) { [weak previewWindowController] in LookAwayReminderView(countdownSeconds: countdownSeconds, onDismiss: dismiss)
previewWindowController?.window?.close() }
}
)
} }
} }

View File

@@ -10,7 +10,6 @@ import SwiftUI
struct PostureSetupView: View { struct PostureSetupView: View {
@Bindable var settingsManager: SettingsManager @Bindable var settingsManager: SettingsManager
@State private var previewWindowController: NSWindowController?
var body: some View { var body: some View {
VStack(spacing: 0) { VStack(spacing: 0) {
@@ -72,14 +71,10 @@ struct PostureSetupView: View {
private func showPreviewWindow() { private func showPreviewWindow() {
guard let screen = NSScreen.main else { return } guard let screen = NSScreen.main else { return }
previewWindowController = PreviewWindowHelper.showPreview( let sizePercentage = settingsManager.settings.subtleReminderSize.percentage
on: screen, PreviewWindowHelper.showPreview(on: screen) { dismiss in
content: PostureReminderView( PostureReminderView(sizePercentage: sizePercentage, onDismiss: dismiss)
sizePercentage: settingsManager.settings.subtleReminderSize.percentage }
) { [weak previewWindowController] in
previewWindowController?.window?.close()
}
)
} }
} }