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

View File

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

View File

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

View File

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