fix: preview tear down fix
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user