Fix mobile SFTP menu interactions

This commit is contained in:
Kaede Akino committed 2026-09-17 16:52:49 +08:00
1 parent 997fd79815
commit a0649f05aa
3 files changed
+26 -3

No files matched your search

@@ -152,6 +152,7 @@ struct MobileSFTPBrowser: View {
Button("Paste", systemImage: "doc.on.clipboard") { paste() }
Button("Rename", systemImage: "pencil") { rename(file) }
Button("Edit Permissions", systemImage: "lock.shield") { editPermissions(file) }
Divider()
Button("Delete", systemImage: "trash", role: .destructive) { delete(file) }
}
.accessibilityHint(file.isDirectory ? Text("Open") : Text("Download"))
@@ -197,6 +197,7 @@ struct MobileWorkspaceView: View {
} label: {
MobileOverflowMenuLabel("More")
}
.menuOrder(.fixed)
}
}
}
+24 -3
View File
@@ -367,6 +367,8 @@ final class MobileHostingListRow: ListRowView, UIGestureRecognizerDelegate {
private let contentContainer = UIView()
private var hostedView: UIView?
private var onSelect: (() -> Void)?
private weak var selectionTapRecognizer: UITapGestureRecognizer?
private weak var highlightPressRecognizer: UILongPressGestureRecognizer?
private var pressOrigin: CGPoint?
private var restingBackgroundColor = UIColor.clear
@@ -389,12 +391,14 @@ final class MobileHostingListRow: ListRowView, UIGestureRecognizerDelegate {
tap.cancelsTouchesInView = false
tap.delegate = self
contentContainer.addGestureRecognizer(tap)
selectionTapRecognizer = tap
let press = UILongPressGestureRecognizer(target: self, action: #selector(rowPressed(_:)))
press.minimumPressDuration = 0
press.cancelsTouchesInView = false
press.delegate = self
contentContainer.addGestureRecognizer(press)
highlightPressRecognizer = press
}
override func prepareForReuse() {
@@ -441,10 +445,27 @@ final class MobileHostingListRow: ListRowView, UIGestureRecognizerDelegate {
}
func gestureRecognizer(
_: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWith _: UIGestureRecognizer
_ gestureRecognizer: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer
) -> Bool {
true
guard
gestureRecognizer === selectionTapRecognizer
|| otherGestureRecognizer === selectionTapRecognizer
else { return true }
let counterpart =
gestureRecognizer === selectionTapRecognizer
? otherGestureRecognizer : gestureRecognizer
if counterpart === highlightPressRecognizer { return true }
return !(counterpart is UILongPressGestureRecognizer)
}
func gestureRecognizer(
_ gestureRecognizer: UIGestureRecognizer,
shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer
) -> Bool {
gestureRecognizer === selectionTapRecognizer
&& otherGestureRecognizer !== highlightPressRecognizer
&& otherGestureRecognizer is UILongPressGestureRecognizer
}
@objc private func rowTapped() { onSelect?() }