diff --git a/TablePro/AppDelegate.swift b/TablePro/AppDelegate.swift index ef067d0db..d1772833a 100644 --- a/TablePro/AppDelegate.swift +++ b/TablePro/AppDelegate.swift @@ -96,6 +96,17 @@ class AppDelegate: NSObject, NSApplicationDelegate { func applicationDidBecomeActive(_ notification: Notification) { runPostLaunchActivationIfNeeded() SyncCoordinator.shared.syncIfNeeded() + ensureAtLeastOneVisibleWindow() + } + + private func ensureAtLeastOneVisibleWindow() { + let hasVisibleWindow = NSApp.windows.contains { window in + guard window.isVisible else { return false } + return AppLaunchCoordinator.isMainWindow(window) + || AppLaunchCoordinator.isWelcomeWindow(window) + } + guard !hasVisibleWindow else { return } + WindowOpener.shared.openWelcome() } private func runPostLaunchActivationIfNeeded() { diff --git a/TablePro/Core/Services/Infrastructure/AppLaunchCoordinator.swift b/TablePro/Core/Services/Infrastructure/AppLaunchCoordinator.swift index e3114be40..f92adf427 100644 --- a/TablePro/Core/Services/Infrastructure/AppLaunchCoordinator.swift +++ b/TablePro/Core/Services/Infrastructure/AppLaunchCoordinator.swift @@ -172,10 +172,7 @@ internal final class AppLaunchCoordinator { showWelcomeWindow() return } - for window in NSApp.windows where Self.isWelcomeWindow(window) { - window.orderOut(nil) - } - Task { [weak self] in + Task { for connection in valid { let payload = EditorTabPayload( connectionId: connection.id, intent: .restoreOrDefault @@ -194,11 +191,13 @@ internal final class AppLaunchCoordinator { } } } - for window in NSApp.windows where Self.isWelcomeWindow(window) { - window.close() + let hasVisibleMain = NSApp.windows.contains { + Self.isMainWindow($0) && $0.isVisible } - if !NSApp.windows.contains(where: { Self.isMainWindow($0) && $0.isVisible }) { - self?.showWelcomeWindow() + if hasVisibleMain { + for window in NSApp.windows where Self.isWelcomeWindow(window) { + window.close() + } } } }