← All repositories

listless

A simple list app for Apple platforms

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


commit 6461f078965680b59f9fd7ffba514062116ddad6
parent 59fbebbcd921ecfc3180469d2c97c7fda0596761
Author: Michael Camilleri <[email protected]>
Date:   Sat,  7 Feb 2026 22:40:42 +0900

Add undo

Co-Authored-By: Claude 4.5 Sonnet <[email protected]>

Diffstat

MListless/Views/TaskListView.swift | 14++++++++++++++

1 file changed, 14 insertions(+), 0 deletions(-)

diff --git a/Listless/Views/TaskListView.swift b/Listless/Views/TaskListView.swift

@@ -6,6 +6,9 @@ struct TaskListView: View {
         case scrollView
     }
 
+    @Environment(\.undoManager) private var undoManager
+    @Environment(\.managedObjectContext) private var managedObjectContext
+
     @State private var store: TaskStore
     @FetchRequest(
         sortDescriptors: [
@@ -155,6 +158,10 @@ struct TaskListView: View {
                 }
             }
         }
+        .onChange(of: undoManager, initial: true) { _, newValue in
+            // Connect SwiftUI's undo manager to Core Data context for automatic undo/redo
+            managedObjectContext.undoManager = newValue
+        }
     }
 
     private var activeTasks: [TaskItem] {
@@ -252,7 +259,14 @@ struct TaskListView: View {
         }
         let trimmedTitle = task.title.trimmingCharacters(in: .whitespacesAndNewlines)
         guard trimmedTitle.isEmpty else { return }
+
+        // Remove this task from undo history since it was never really used
+        managedObjectContext.undoManager?.removeAllActions(withTarget: task)
+
+        // Disable undo registration for the delete operation itself
+        managedObjectContext.undoManager?.disableUndoRegistration()
         deleteTask(task)
+        managedObjectContext.undoManager?.enableUndoRegistration()
     }