diff --git a/CHANGELOG.md b/CHANGELOG.md index b671cb7f0..22e4345d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -98,6 +98,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Welcome window sometimes failed to open on launch (and Dock-icon clicks did nothing) when the previous session restored only main connection windows. `WindowOpenerBridge` was mounted only in the Welcome scene and used `.onAppear`, so if Welcome got `orderOut`'d before its first appearance the bridge never wired and every `openWelcome()` call queued forever. The bridge now mounts in all four SwiftUI scenes (Welcome, ConnectionForm, IntegrationsActivity, Settings) and uses `.task` so wiring fires reliably whenever any scene materializes - Plugin upgrades for built-in drivers (MySQL, PostgreSQL, SQLite, ClickHouse, Redis, etc.) no longer revert to the bundled version after restart. Discovery now scans both built-in and user plugin directories, picks the newest version by `CFBundleShortVersionString`, and only prunes user copies that are older than or equal to the built-in (#1192) - Concurrent plugin installs from the registry can no longer race past the `isInstalling` guard; the lock now wraps `installFromRegistry` and `updateFromRegistry` end-to-end - Plugin manager's `waitForInitialLoad` no longer leaks a continuation when its 10-second timeout fires before initial load completes diff --git a/TablePro/TableProApp.swift b/TablePro/TableProApp.swift index c7cd4077a..7c61ad927 100644 --- a/TablePro/TableProApp.swift +++ b/TablePro/TableProApp.swift @@ -653,6 +653,7 @@ struct TableProApp: App { WindowGroup("New Connection", id: SceneId.connectionForm, for: UUID?.self) { $editingId in ConnectionFormView(connectionId: editingId ?? nil) + .background(WindowOpenerBridge()) .background(WindowChromeConfigurator(restorable: false)) .environment(\.appServices, .live) } @@ -662,6 +663,7 @@ struct TableProApp: App { Window("Integrations Activity", id: SceneId.integrationsActivity) { IntegrationsActivityView() + .background(WindowOpenerBridge()) .environment(\.appServices, .live) } .windowResizability(.contentMinSize) @@ -676,6 +678,7 @@ struct TableProApp: App { Settings { SettingsView() + .background(WindowOpenerBridge()) .environment(updaterBridge) .environment(\.appServices, .live) } diff --git a/TablePro/Views/Infrastructure/WindowOpenerBridge.swift b/TablePro/Views/Infrastructure/WindowOpenerBridge.swift index 687cce781..547ecaa66 100644 --- a/TablePro/Views/Infrastructure/WindowOpenerBridge.swift +++ b/TablePro/Views/Infrastructure/WindowOpenerBridge.swift @@ -13,7 +13,7 @@ internal struct WindowOpenerBridge: View { var body: some View { Color.clear .frame(width: 0, height: 0) - .onAppear { wireUp() } + .task { wireUp() } } private func wireUp() {