Skip to content

Commit 779bf8f

Browse files
committed
fix: keystroke for backlogging tasks
1 parent c1781d9 commit 779bf8f

File tree

2 files changed

+62
-9
lines changed

2 files changed

+62
-9
lines changed

Axel.xcodeproj/project.pbxproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,7 @@
782782
DEVELOPMENT_TEAM = 8ZJ55A62XN;
783783
GENERATE_INFOPLIST_FILE = YES;
784784
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
785-
MARKETING_VERSION = 0.1.13;
785+
MARKETING_VERSION = 0.1.14;
786786
PRODUCT_BUNDLE_IDENTIFIER = md.axel.AxelUITests;
787787
PRODUCT_NAME = "$(TARGET_NAME)";
788788
SDKROOT = iphoneos;
@@ -804,7 +804,7 @@
804804
DEVELOPMENT_TEAM = 8ZJ55A62XN;
805805
GENERATE_INFOPLIST_FILE = YES;
806806
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
807-
MARKETING_VERSION = 0.1.13;
807+
MARKETING_VERSION = 0.1.14;
808808
PRODUCT_BUNDLE_IDENTIFIER = md.axel.AxelUITests;
809809
PRODUCT_NAME = "$(TARGET_NAME)";
810810
SDKROOT = iphoneos;
@@ -834,7 +834,7 @@
834834
"@loader_path/../Frameworks",
835835
);
836836
MACOSX_DEPLOYMENT_TARGET = 15.6;
837-
MARKETING_VERSION = 0.1.13;
837+
MARKETING_VERSION = 0.1.14;
838838
PRODUCT_BUNDLE_IDENTIFIER = com.axel.AxelTests;
839839
PRODUCT_MODULE_NAME = AxelTests;
840840
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -860,7 +860,7 @@
860860
"@loader_path/../Frameworks",
861861
);
862862
MACOSX_DEPLOYMENT_TARGET = 15.6;
863-
MARKETING_VERSION = 0.1.13;
863+
MARKETING_VERSION = 0.1.14;
864864
PRODUCT_BUNDLE_IDENTIFIER = com.axel.AxelTests;
865865
PRODUCT_MODULE_NAME = AxelTests;
866866
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -1034,7 +1034,7 @@
10341034
"@executable_path/Frameworks",
10351035
);
10361036
MACOSX_DEPLOYMENT_TARGET = 15.6;
1037-
MARKETING_VERSION = 0.1.13;
1037+
MARKETING_VERSION = 0.1.14;
10381038
"OTHER_LDFLAGS[sdk=macosx*]" = (
10391039
"-lc++",
10401040
"-framework",
@@ -1094,7 +1094,7 @@
10941094
"@executable_path/Frameworks",
10951095
);
10961096
MACOSX_DEPLOYMENT_TARGET = 15.6;
1097-
MARKETING_VERSION = 0.1.13;
1097+
MARKETING_VERSION = 0.1.14;
10981098
"OTHER_LDFLAGS[sdk=macosx*]" = (
10991099
"-lc++",
11001100
"-framework",

Axel/Views/macOS/TasksSceneView.swift

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,28 @@ struct WorkspaceQueueListView: View {
271271
}
272272
}
273273

274+
/// Move selected task back to backlog
275+
private func moveSelectedToBacklog() {
276+
guard let task = viewModel.highlightedTask(in: visibleTasksInOrder),
277+
task.taskStatus != .backlog else { return }
278+
279+
// Find next task before changing status
280+
if let currentIndex = visibleTasksInOrder.firstIndex(where: { $0.id == task.id }) {
281+
let nextTask = currentIndex < visibleTasksInOrder.count - 1
282+
? visibleTasksInOrder[currentIndex + 1]
283+
: (currentIndex > 0 ? visibleTasksInOrder[currentIndex - 1] : nil)
284+
285+
task.updateStatusWithUndo(.backlog)
286+
287+
// Select next task if the current one will disappear from this view
288+
if let next = nextTask, filter != .backlog && filter != .all {
289+
selectTask(next)
290+
}
291+
} else {
292+
task.updateStatusWithUndo(.backlog)
293+
}
294+
}
295+
274296
/// Move selected task up in priority (lower priority number = higher in list)
275297
private func moveSelectedPriorityUp() {
276298
guard let task = viewModel.highlightedTask(in: visibleTasksInOrder) else { return }
@@ -394,6 +416,7 @@ struct WorkspaceQueueListView: View {
394416
onToggleExpand: toggleSelectedTaskExpansion,
395417
onMarkComplete: markSelectedComplete,
396418
onMarkCancelled: markSelectedCancelled,
419+
onMoveToBacklog: moveSelectedToBacklog,
397420
onMovePriorityUp: moveSelectedPriorityUp,
398421
onMovePriorityDown: moveSelectedPriorityDown,
399422
onRunSelected: runHighlightedTask
@@ -630,7 +653,11 @@ struct WorkspaceQueueListView: View {
630653
onMarkCompleted: {
631654
handleTaskStatusChange(task)
632655
task.updateStatusWithUndo(.completed)
633-
}
656+
},
657+
onMoveToBacklog: task.taskStatus != .backlog ? {
658+
handleTaskStatusChange(task)
659+
task.updateStatusWithUndo(.backlog)
660+
} : nil
634661
) {
635662
TextField(
636663
"Note details",
@@ -686,7 +713,11 @@ struct WorkspaceQueueListView: View {
686713
onMarkCompleted: {
687714
handleTaskStatusChange(task)
688715
task.updateStatusWithUndo(.completed)
689-
}
716+
},
717+
onMoveToBacklog: task.taskStatus != .backlog ? {
718+
handleTaskStatusChange(task)
719+
task.updateStatusWithUndo(.backlog)
720+
} : nil
690721
) {
691722
TextField(
692723
"Note details",
@@ -1174,6 +1205,7 @@ struct TaskListKeyboardModifier: ViewModifier {
11741205
var onToggleExpand: () -> Void
11751206
var onMarkComplete: () -> Void
11761207
var onMarkCancelled: () -> Void
1208+
var onMoveToBacklog: () -> Void
11771209
var onMovePriorityUp: () -> Void
11781210
var onMovePriorityDown: () -> Void
11791211
var onRunSelected: () -> Void
@@ -1237,6 +1269,15 @@ struct TaskListKeyboardModifier: ViewModifier {
12371269
}
12381270
return .ignored
12391271
}
1272+
.onKeyPress(keys: [KeyEquivalent("b")], phases: .down) { keyPress in
1273+
guard expandedTaskId == nil else { return .ignored }
1274+
if keyPress.modifiers == .command {
1275+
// Cmd+B: move to backlog
1276+
onMoveToBacklog()
1277+
return .handled
1278+
}
1279+
return .ignored
1280+
}
12401281
.onKeyPress(keys: [KeyEquivalent("a")], phases: .down) { keyPress in
12411282
if keyPress.modifiers.contains(.command) {
12421283
onSelectAll()
@@ -1293,6 +1334,7 @@ struct ExpandableRow<Item: ExpandableListItem, ExpandedContent: View>: View {
12931334
var onDelete: (() -> Void)? = nil
12941335
var onMarkCancelled: (() -> Void)? = nil
12951336
var onMarkCompleted: (() -> Void)? = nil
1337+
var onMoveToBacklog: (() -> Void)? = nil
12961338
let style: ExpandableRowStyle
12971339
let expandedContent: () -> ExpandedContent
12981340
@State private var isStatusHovering: Bool = false
@@ -1308,6 +1350,7 @@ struct ExpandableRow<Item: ExpandableListItem, ExpandedContent: View>: View {
13081350
onDelete: (() -> Void)? = nil,
13091351
onMarkCancelled: (() -> Void)? = nil,
13101352
onMarkCompleted: (() -> Void)? = nil,
1353+
onMoveToBacklog: (() -> Void)? = nil,
13111354
style: ExpandableRowStyle = .default,
13121355
@ViewBuilder expandedContent: @escaping () -> ExpandedContent
13131356
) {
@@ -1319,6 +1362,7 @@ struct ExpandableRow<Item: ExpandableListItem, ExpandedContent: View>: View {
13191362
self.onDelete = onDelete
13201363
self.onMarkCancelled = onMarkCancelled
13211364
self.onMarkCompleted = onMarkCompleted
1365+
self.onMoveToBacklog = onMoveToBacklog
13221366
self.style = style
13231367
self.expandedContent = expandedContent
13241368
}
@@ -1464,7 +1508,16 @@ struct ExpandableRow<Item: ExpandableListItem, ExpandedContent: View>: View {
14641508
.keyboardShortcut("k", modifiers: [.command, .option])
14651509
}
14661510

1467-
if onRun != nil || onMarkCompleted != nil || onMarkCancelled != nil {
1511+
if let onMoveToBacklog {
1512+
Button {
1513+
onMoveToBacklog()
1514+
} label: {
1515+
Label("Move to Backlog", systemImage: "tray")
1516+
}
1517+
.keyboardShortcut("b", modifiers: .command)
1518+
}
1519+
1520+
if onRun != nil || onMarkCompleted != nil || onMarkCancelled != nil || onMoveToBacklog != nil {
14681521
Divider()
14691522
}
14701523

0 commit comments

Comments
 (0)