Close Page view popup tabs when pages request it

This commit is contained in:
Ian Gulliver
2026-10-23 21:07:49 -07:00
parent e31462281b
commit 5987e764c4
2 changed files with 20 additions and 1 deletions
+17 -1
View File
@@ -93,7 +93,11 @@ extension Store {
if shown.pages.isEmpty {
shownPages[page.root] = nil
pages.closeSites(page.root)
if sheet?.tab == .page {
let owner: Sheet.Owner = switch page.root {
case .task(let id): .task(id)
case .project(let id): .project(id)
}
if sheet?.tab == .page, sheet?.owner == owner {
sheet = nil
}
return
@@ -163,6 +167,7 @@ final class Pages {
private(set) var titles: [Page: String] = [:]
@ObservationIgnored var served: [PageSite: [String: Data]] = [:]
@ObservationIgnored var popup: ((Page) -> Void)?
@ObservationIgnored var closePage: ((Page) -> Void)?
@ObservationIgnored private var listener: PageListener?
@ObservationIgnored private var hosts: [PageSite: String] = [:]
@ObservationIgnored private var sites: [String: PageSite] = [:]
@@ -177,6 +182,12 @@ final class Pages {
delegate.popup = { [weak self] opener, config in
self?.adopt(opener, config)
}
delegate.close = { [weak self] view in
guard let self, let page = self.views.first(where: { $0.value === view })?.key else {
return
}
self.closePage?(page)
}
listener = PageListener(api: api, ready: { [weak self] port in
Task { @MainActor in
self?.port = port
@@ -638,6 +649,11 @@ private struct PageTabButton: View {
@MainActor
private final class PageDelegate: NSObject, WKUIDelegate, WKNavigationDelegate {
var popup: ((WKWebView, WKWebViewConfiguration) -> WKWebView?)?
var close: ((WKWebView) -> Void)?
func webViewDidClose(_ webView: WKWebView) {
close?(webView)
}
private var waits: [ObjectIdentifier: CheckedContinuation<Void, any Error>] = [:]
func wait(_ navigation: WKNavigation?) async throws {
+3
View File
@@ -136,6 +136,9 @@ final class Store {
pages.popup = { [weak self] page in
self?.openPage(page)
}
pages.closePage = { [weak self] page in
self?.closePage(page)
}
}
func sends(_ key: String) -> LocalSends {