listless

A simple list app for Apple platforms
Log | Files | Refs | README | LICENSE

commit 463dfb7e30f741b194661aa5e6d4147cc64cefcb
parent 81980ccc5bf8a912344dbe7330a505953af98231
Author: Michael Camilleri <[email protected]>
Date:   Tue, 31 Mar 2026 18:12:49 +0900

Disable pull-to-create gesture while editing a row

This addresses an issue raised during the beta testing where it was
possible to use the pull-to-create gesture while a row was being added.
This can be disruptive and is presumably not something a user would
intend to do.

Co-Authored-By: Claude 4.6 Opus <[email protected]>

Diffstat:
MListlessiOS/Extensions/ItemListView+PullGestures.swift | 12++++++------
MListlessiOS/Views/ItemListView.swift | 2+-
2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/ListlessiOS/Extensions/ItemListView+PullGestures.swift b/ListlessiOS/Extensions/ItemListView+PullGestures.swift @@ -69,7 +69,7 @@ private struct PullGesturesModifier: ViewModifier { @AppStorage("hapticsEnabled") private var hapticsEnabled = true @State private var isScrollInteracting = false - let isDraftOpen: Bool + let isEditing: Bool let hasCompletedItems: Bool let pullCreateThreshold: CGFloat let flickThreshold: CGFloat @@ -82,7 +82,7 @@ private struct PullGesturesModifier: ViewModifier { .onScrollGeometryChange(for: CGFloat.self) { geo in max(0, -(geo.contentOffset.y + geo.contentInsets.top)) } action: { _, pullDistance in - if isDraftOpen { + if isEditing { pullToCreate.updatePullDistance(0) } else { pullToCreate.updatePullDistance(pullDistance) @@ -113,7 +113,7 @@ private struct PullGesturesModifier: ViewModifier { } .sensoryFeedback( .impact(weight: .light), - trigger: hapticsEnabled && !isDraftOpen && pullToCreate.pullOffset >= pullCreateThreshold + trigger: hapticsEnabled && !isEditing && pullToCreate.pullOffset >= pullCreateThreshold ) { old, new in !old && new } @@ -123,7 +123,7 @@ private struct PullGesturesModifier: ViewModifier { } private func handlePullToCreateScrollPhaseChange(from oldPhase: ScrollPhase, to newPhase: ScrollPhase) { - guard !isDraftOpen else { return } + guard !isEditing else { return } let action = pullToCreate.handlePhaseChange( from: oldPhase, to: newPhase, @@ -163,7 +163,7 @@ extension View { func pullGestures( pullToCreate: Binding<ItemListView.PullToCreateState>, pullUpOffset: Binding<CGFloat>, - isDraftOpen: Bool, + isEditing: Bool, hasCompletedItems: Bool, pullCreateThreshold: CGFloat, flickThreshold: CGFloat, @@ -175,7 +175,7 @@ extension View { PullGesturesModifier( pullToCreate: pullToCreate, pullUpOffset: pullUpOffset, - isDraftOpen: isDraftOpen, + isEditing: isEditing, hasCompletedItems: hasCompletedItems, pullCreateThreshold: pullCreateThreshold, flickThreshold: flickThreshold, diff --git a/ListlessiOS/Views/ItemListView.swift b/ListlessiOS/Views/ItemListView.swift @@ -624,7 +624,7 @@ struct ItemListView: View, ItemListViewProtocol { .pullGestures( pullToCreate: $pState.pullToCreate, pullUpOffset: $pState.pullUpOffset, - isDraftOpen: draftPlacement != nil, + isEditing: focusedField != nil && focusedField != .scrollView, hasCompletedItems: !completedItems.isEmpty, pullCreateThreshold: pullCreateThreshold, flickThreshold: flickThreshold,