Skip to content

Commit 2e8c793

Browse files
authored
Fix external link alert macOS (#539)
* view model * handler * notification name
1 parent fba629b commit 2e8c793

File tree

3 files changed

+6
-6
lines changed

3 files changed

+6
-6
lines changed

SwiftUI/Patches.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ extension Color {
6262

6363
extension Notification.Name {
6464
static let alert = Notification.Name("alert")
65-
static let externalLink = Notification.Name("externalLink")
6665
static let openFiles = Notification.Name("openFiles")
6766
static let openURL = Notification.Name("openURL")
6867
static let toggleSidebar = Notification.Name("toggleSidebar")

ViewModel/BrowserViewModel.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class BrowserViewModel: NSObject, ObservableObject,
4545
@Published private(set) var outlineItems = [OutlineItem]()
4646
@Published private(set) var outlineItemTree = [OutlineItem]()
4747
@Published private(set) var url: URL?
48+
@Published var externalLink: URL?
4849

4950
let tabID: NSManagedObjectID?
5051
let webView: WKWebView
@@ -179,7 +180,7 @@ class BrowserViewModel: NSObject, ObservableObject,
179180
} else if url.isKiwixURL {
180181
decisionHandler(.allow)
181182
} else if url.scheme == "http" || url.scheme == "https" {
182-
NotificationCenter.default.post(name: .externalLink, object: nil, userInfo: ["url": url])
183+
externalLink = url
183184
decisionHandler(.cancel)
184185
} else if url.scheme == "geo" {
185186
if FeatureFlags.map {

Views/ViewModifiers/ExternalLinkHandler.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@ import SwiftUI
1111
import Defaults
1212

1313
struct ExternalLinkHandler: ViewModifier {
14+
@EnvironmentObject private var browserViewModel: BrowserViewModel
1415
@State private var isAlertPresented = false
1516
@State private var activeAlert: ActiveAlert?
1617
@State private var activeSheet: ActiveSheet?
1718

18-
private let externalLink = NotificationCenter.default.publisher(for: .externalLink)
19-
2019
enum ActiveAlert {
2120
case ask(url: URL)
2221
case notLoading
@@ -28,8 +27,9 @@ struct ExternalLinkHandler: ViewModifier {
2827
}
2928

3029
func body(content: Content) -> some View {
31-
content.onReceive(externalLink) { notification in
32-
guard let url = notification.userInfo?["url"] as? URL else { return }
30+
content.onChange(of: browserViewModel.externalLink) { url in
31+
defer { browserViewModel.externalLink = nil }
32+
guard let url = url else { return }
3333
switch Defaults[.externalLinkLoadingPolicy] {
3434
case .alwaysAsk:
3535
isAlertPresented = true

0 commit comments

Comments
 (0)