← All repositories

listless

A simple list app for Apple platforms

git clone https://code.inqk.net/listless.git


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,