From 61abd7d92363fcc26feb5c04ab6e90aae1ea6f8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ng=C3=B4=20Qu=E1=BB=91c=20=C4=90=E1=BA=A1t?= Date: Mon, 6 Apr 2026 09:29:53 +0700 Subject: [PATCH] fix: file picker appears behind connection form window --- CHANGELOG.md | 4 ++++ TablePro/AppDelegate+WindowConfig.swift | 2 -- TablePro/Views/Connection/ConnectionFormView.swift | 3 ++- TablePro/Views/Connection/ConnectionSSHTunnelView.swift | 6 ++++-- TablePro/Views/Connection/ConnectionSSLView.swift | 3 ++- TablePro/Views/Connection/SSHProfileEditorView.swift | 6 ++++-- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f79df3828..20085fb62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- File picker dialog appears behind the connection form window + ### Added - iOS: connection groups and tags diff --git a/TablePro/AppDelegate+WindowConfig.swift b/TablePro/AppDelegate+WindowConfig.swift index 07e77da59..e1da705df 100644 --- a/TablePro/AppDelegate+WindowConfig.swift +++ b/TablePro/AppDelegate+WindowConfig.swift @@ -203,8 +203,6 @@ extension AppDelegate { window.collectionBehavior.remove(.fullScreenPrimary) window.collectionBehavior.insert(.fullScreenNone) - - window.level = .floating } // MARK: - Welcome Window Suppression diff --git a/TablePro/Views/Connection/ConnectionFormView.swift b/TablePro/Views/Connection/ConnectionFormView.swift index f0d7d84b4..84240717a 100644 --- a/TablePro/Views/Connection/ConnectionFormView.swift +++ b/TablePro/Views/Connection/ConnectionFormView.swift @@ -1155,12 +1155,13 @@ struct ConnectionFormView: View { } private func browseForFile() { + guard let window = NSApp.keyWindow else { return } let panel = NSOpenPanel() panel.allowedContentTypes = [.database, .data] panel.allowsMultipleSelection = false panel.canChooseDirectories = false - panel.begin { response in + panel.beginSheetModal(for: window) { response in if response == .OK, let url = panel.url { database = url.path(percentEncoded: false) } diff --git a/TablePro/Views/Connection/ConnectionSSHTunnelView.swift b/TablePro/Views/Connection/ConnectionSSHTunnelView.swift index d7311f2c8..eb3df2bb2 100644 --- a/TablePro/Views/Connection/ConnectionSSHTunnelView.swift +++ b/TablePro/Views/Connection/ConnectionSSHTunnelView.swift @@ -335,6 +335,7 @@ struct ConnectionSSHTunnelView: View { // MARK: - Helper Methods private func browseForPrivateKey() { + guard let window = NSApp.keyWindow else { return } let panel = NSOpenPanel() panel.allowsMultipleSelection = false panel.canChooseDirectories = false @@ -342,7 +343,7 @@ struct ConnectionSSHTunnelView: View { ".ssh") panel.showsHiddenFiles = true - panel.begin { response in + panel.beginSheetModal(for: window) { response in if response == .OK, let url = panel.url { sshPrivateKeyPath = url.path(percentEncoded: false) } @@ -350,6 +351,7 @@ struct ConnectionSSHTunnelView: View { } private func browseForJumpHostKey(jumpHost: Binding) { + guard let window = NSApp.keyWindow else { return } let panel = NSOpenPanel() panel.allowsMultipleSelection = false panel.canChooseDirectories = false @@ -357,7 +359,7 @@ struct ConnectionSSHTunnelView: View { ".ssh") panel.showsHiddenFiles = true - panel.begin { response in + panel.beginSheetModal(for: window) { response in if response == .OK, let url = panel.url { jumpHost.wrappedValue.privateKeyPath = url.path(percentEncoded: false) } diff --git a/TablePro/Views/Connection/ConnectionSSLView.swift b/TablePro/Views/Connection/ConnectionSSLView.swift index 32dae830c..7326e2972 100644 --- a/TablePro/Views/Connection/ConnectionSSLView.swift +++ b/TablePro/Views/Connection/ConnectionSSLView.swift @@ -76,13 +76,14 @@ struct ConnectionSSLView: View { } private func browseForCertificate(binding: Binding) { + guard let window = NSApp.keyWindow else { return } let panel = NSOpenPanel() panel.allowsMultipleSelection = false panel.canChooseDirectories = false panel.allowedContentTypes = [.data] panel.showsHiddenFiles = true - panel.begin { response in + panel.beginSheetModal(for: window) { response in if response == .OK, let url = panel.url { binding.wrappedValue = url.path(percentEncoded: false) } diff --git a/TablePro/Views/Connection/SSHProfileEditorView.swift b/TablePro/Views/Connection/SSHProfileEditorView.swift index 3bb6fdfc5..4672fe155 100644 --- a/TablePro/Views/Connection/SSHProfileEditorView.swift +++ b/TablePro/Views/Connection/SSHProfileEditorView.swift @@ -510,12 +510,13 @@ struct SSHProfileEditorView: View { } private func browseForPrivateKey() { + guard let window = NSApp.keyWindow else { return } let panel = NSOpenPanel() panel.allowsMultipleSelection = false panel.canChooseDirectories = false panel.directoryURL = FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent(".ssh") panel.showsHiddenFiles = true - panel.begin { response in + panel.beginSheetModal(for: window) { response in if response == .OK, let url = panel.url { privateKeyPath = url.path(percentEncoded: false) } @@ -523,12 +524,13 @@ struct SSHProfileEditorView: View { } private func browseForJumpHostKey(jumpHost: Binding) { + guard let window = NSApp.keyWindow else { return } let panel = NSOpenPanel() panel.allowsMultipleSelection = false panel.canChooseDirectories = false panel.directoryURL = FileManager.default.homeDirectoryForCurrentUser.appendingPathComponent(".ssh") panel.showsHiddenFiles = true - panel.begin { response in + panel.beginSheetModal(for: window) { response in if response == .OK, let url = panel.url { jumpHost.wrappedValue.privateKeyPath = url.path(percentEncoded: false) }