Files
Gaze/Gaze/GazeApp.swift
2026-01-13 12:59:36 -05:00

76 lines
2.4 KiB
Swift
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// GazeApp.swift
// Gaze
//
// Created by Mike Freno on 1/7/26.
//
import SwiftUI
@main
struct GazeApp: App {
@NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
@StateObject private var settingsManager = SettingsManager.shared
init() {
print("🚀 GazeApp: init")
// Handle test launch arguments
if TestingEnvironment.shouldSkipOnboarding {
print(" Test mode: Skipping onboarding")
SettingsManager.shared.settings.hasCompletedOnboarding = true
} else if TestingEnvironment.shouldResetOnboarding {
print(" Test mode: Resetting onboarding")
SettingsManager.shared.settings.hasCompletedOnboarding = false
}
print("✓ GazeApp initialized")
}
var body: some Scene {
// Onboarding window (only shown when not completed)
WindowGroup {
if settingsManager.settings.hasCompletedOnboarding {
EmptyView()
.onAppear {
closeAllWindows()
}
} else {
OnboardingContainerView(settingsManager: settingsManager)
.onChange(of: settingsManager.settings.hasCompletedOnboarding) {
completed in
if completed {
closeAllWindows()
appDelegate.onboardingCompleted()
}
}
}
}
.windowStyle(.hiddenTitleBar)
.windowResizability(.contentSize)
.defaultSize(width: 700, height: 700)
.commands {
CommandGroup(replacing: .newItem) {}
}
// Menu bar extra (always present)
MenuBarExtra("Gaze", systemImage: "eye.fill") {
MenuBarContentWrapper(
appDelegate: appDelegate,
settingsManager: settingsManager,
onQuit: { NSApplication.shared.terminate(nil) },
onOpenSettings: { appDelegate.openSettings() },
onOpenSettingsTab: { tab in appDelegate.openSettings(tab: tab) },
onOpenOnboarding: { appDelegate.openOnboarding() }
)
}
.menuBarExtraStyle(.window)
}
private func closeAllWindows() {
for window in NSApplication.shared.windows {
window.close()
}
}
}