From 2a457b4c8f613feb7d5a24d5971036f2162bee47 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Tue, 3 Feb 2026 20:35:00 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Adds=20posh=20context=20menus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iOS/Article/WebViewController.swift | 2 +- .../MainTimelineModernViewController.swift | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/iOS/Article/WebViewController.swift b/iOS/Article/WebViewController.swift index cbca90d03..5552a3703 100644 --- a/iOS/Article/WebViewController.swift +++ b/iOS/Article/WebViewController.swift @@ -67,7 +67,7 @@ final class WebViewController: UIViewController { weak var coordinator: SceneCoordinator! weak var delegate: WebViewControllerDelegate? - private(set) var article: Article? + var article: Article? let scrollPositionQueue = CoalescingQueue(name: "Article Scroll Position", interval: 0.3, maxInterval: 0.3) var windowScrollY = 0 { diff --git a/iOS/MainTimeline/MainTimelineModernViewController.swift b/iOS/MainTimeline/MainTimelineModernViewController.swift index 33174ba6d..858c0e730 100644 --- a/iOS/MainTimeline/MainTimelineModernViewController.swift +++ b/iOS/MainTimeline/MainTimelineModernViewController.swift @@ -490,7 +490,14 @@ extension MainTimelineModernViewController: UICollectionViewDelegate { func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemsAt indexPaths: [IndexPath], point: CGPoint) -> UIContextMenuConfiguration? { guard let firstIndex = indexPaths.first, let dataSource, let article = dataSource.itemIdentifier(for: firstIndex) else { return nil } - return UIContextMenuConfiguration(identifier: firstIndex.row as NSCopying, previewProvider: nil, actionProvider: { [weak self] _ in + return UIContextMenuConfiguration(identifier: firstIndex.row as NSCopying, + previewProvider: { + let previewController = WebViewController() + previewController.coordinator = self.coordinator + previewController.article = article + return previewController + }, + actionProvider: { [weak self] _ in guard let self = self else { return nil } @@ -543,6 +550,15 @@ extension MainTimelineModernViewController: UICollectionViewDelegate { }) } + + func collectionView(_ collectionView: UICollectionView, willPerformPreviewActionForMenuWith configuration: UIContextMenuConfiguration, animator: any UIContextMenuInteractionCommitAnimating) { + animator.addCompletion { [weak self] in + guard let indexRow = configuration.identifier as? Int, + let dataSource = self?.dataSource, + let article = dataSource.itemIdentifier(for: IndexPath(item: indexRow, section: 0)) else { return } + self?.coordinator?.selectArticle(article) + } + } func collectionView(_ collectionView: UICollectionView, contextMenuConfiguration configuration: UIContextMenuConfiguration, highlightPreviewForItemAt indexPath: IndexPath) -> UITargetedPreview? { guard let row = configuration.identifier as? Int,