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