Skip to content

Commit 5e0ece2

Browse files
committed
Merge branch 'main' into fix/terminal-deleting-wrong-tab
2 parents f870bf0 + 580b249 commit 5e0ece2

34 files changed

+456
-247
lines changed

CodeEdit.xcodeproj/project.pbxproj

Lines changed: 45 additions & 19 deletions
Large diffs are not rendered by default.

CodeEdit/Features/ActivityViewer/ActivityViewer.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,7 @@ struct ActivityViewer: View {
5959
.opacity(0.1)
6060
}
6161
}
62+
.accessibilityElement(children: .contain)
63+
.accessibilityLabel("Activity Viewer")
6264
}
6365
}

CodeEdit/Features/ActivityViewer/Notifications/CECircularProgressView.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ struct CECircularProgressView: View {
5050
.font(.caption)
5151
}
5252
}
53+
.accessibilityElement()
54+
.accessibilityAddTraits(.updatesFrequently)
55+
.accessibilityValue(
56+
progress != nil ? Text(progress!, format: .percent) : Text("working")
57+
)
5358
}
5459
}
5560

CodeEdit/Features/ActivityViewer/Notifications/TaskNotificationView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ struct TaskNotificationView: View {
5151
.padding(.trailing, 3)
5252
.popover(isPresented: $isPresented, arrowEdge: .bottom) {
5353
TaskNotificationsDetailView(taskNotificationHandler: taskNotificationHandler)
54-
}.onTapGesture {
54+
}
55+
.onTapGesture {
5556
self.isPresented.toggle()
5657
}
5758
}

CodeEdit/Features/ActivityViewer/Tasks/OptionMenuItemView.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import SwiftUI
1010
struct OptionMenuItemView: View {
1111
var label: String
1212
var action: () -> Void
13+
1314
var body: some View {
1415
HStack {
1516
Text(label)
@@ -22,6 +23,11 @@ struct OptionMenuItemView: View {
2223
.onTapGesture {
2324
action()
2425
}
26+
.accessibilityElement()
27+
.accessibilityAction {
28+
action()
29+
}
30+
.accessibilityLabel(label)
2531
}
2632
}
2733

CodeEdit/Features/ActivityViewer/Tasks/SchemeDropDownView.swift

Lines changed: 45 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,18 @@ struct SchemeDropDownView: View {
2121
workspaceSettingsManager.settings.project.projectName
2222
}
2323

24+
/// Resolves the name one step further than `workspaceName`.
25+
var workspaceDisplayName: String {
26+
workspaceName.isEmpty
27+
? (workspaceFileManager?.workspaceItem.fileName() ?? "No Project found")
28+
: workspaceName
29+
}
30+
2431
var body: some View {
2532
HStack(spacing: 6) {
2633
Image(systemName: "folder.badge.gearshape")
2734
.imageScale(.medium)
28-
Text(
29-
workspaceName.isEmpty
30-
? (workspaceFileManager?.workspaceItem.fileName() ?? "No Project found")
31-
: workspaceName
32-
)
35+
Text(workspaceDisplayName)
3336
}
3437
.font(.subheadline)
3538
.padding(.trailing, 11.5)
@@ -54,31 +57,19 @@ struct SchemeDropDownView: View {
5457
self.isHoveringScheme = hovering
5558
})
5659
.instantPopover(isPresented: $isSchemePopOverPresented, arrowEdge: .bottom) {
57-
VStack(alignment: .leading, spacing: 0) {
58-
WorkspaceMenuItemView(
59-
workspaceFileManager: workspaceFileManager,
60-
item: workspaceFileManager?.workspaceItem
61-
)
62-
Divider()
63-
.padding(.vertical, 5)
64-
Group {
65-
OptionMenuItemView(label: "Add Folder...") {
66-
// TODO: Implment Add Folder
67-
print("NOT IMPLEMENTED")
68-
}
69-
OptionMenuItemView(label: "Workspace Settings...") {
70-
NSApp.sendAction(
71-
#selector(CodeEditWindowController.openWorkspaceSettings(_:)), to: nil, from: nil
72-
)
73-
}
74-
}
75-
}
76-
.font(.subheadline)
77-
.padding(5)
78-
.frame(minWidth: 215)
60+
popoverContent
7961
}
8062
.onTapGesture {
81-
self.isSchemePopOverPresented.toggle()
63+
isSchemePopOverPresented.toggle()
64+
}
65+
.accessibilityElement(children: .combine)
66+
.accessibilityAddTraits(.isButton)
67+
.accessibilityIdentifier("SchemeDropdown")
68+
.accessibilityValue(workspaceDisplayName)
69+
.accessibilityLabel("Active Scheme")
70+
.accessibilityHint("Open the active scheme menu")
71+
.accessibilityAction {
72+
isSchemePopOverPresented.toggle()
8273
}
8374
}
8475

@@ -97,6 +88,32 @@ struct SchemeDropDownView: View {
9788
.font(.system(size: 8, weight: .semibold, design: .default))
9889
.padding(.top, 0.5)
9990
}
91+
92+
@ViewBuilder var popoverContent: some View {
93+
VStack(alignment: .leading, spacing: 0) {
94+
WorkspaceMenuItemView(
95+
workspaceFileManager: workspaceFileManager,
96+
item: workspaceFileManager?.workspaceItem
97+
)
98+
Divider()
99+
.padding(.vertical, 5)
100+
Group {
101+
OptionMenuItemView(label: "Add Folder...") {
102+
// TODO: Implment Add Folder
103+
print("NOT IMPLEMENTED")
104+
}
105+
.disabled(true)
106+
OptionMenuItemView(label: "Workspace Settings...") {
107+
NSApp.sendAction(
108+
#selector(CodeEditWindowController.openWorkspaceSettings(_:)), to: nil, from: nil
109+
)
110+
}
111+
}
112+
}
113+
.font(.subheadline)
114+
.padding(5)
115+
.frame(minWidth: 215)
116+
}
100117
}
101118

102119
// #Preview {

CodeEdit/Features/ActivityViewer/Tasks/TaskDropDownView.swift

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,21 @@ struct TaskDropDownView: View {
3838
.onHover { hovering in
3939
self.isHoveringTasks = hovering
4040
}
41-
.instantPopover(isPresented: $isTaskPopOverPresented, arrowEdge: .bottom) {
41+
.instantPopover(isPresented: $isTaskPopOverPresented, arrowEdge: .top) {
4242
taskPopoverContent
4343
}
4444
.onTapGesture {
4545
self.isTaskPopOverPresented.toggle()
4646
}
47+
.accessibilityElement(children: .combine)
48+
.accessibilityAddTraits(.isButton)
49+
.accessibilityIdentifier("TaskDropdown")
50+
.accessibilityValue(taskManager.selectedTask?.name ?? "Create Tasks")
51+
.accessibilityLabel("Active Task")
52+
.accessibilityHint("Open the active task menu")
53+
.accessibilityAction {
54+
isTaskPopOverPresented = true
55+
}
4756
}
4857

4958
private var backgroundColor: some View {
@@ -71,7 +80,9 @@ struct TaskDropDownView: View {
7180
VStack(alignment: .leading, spacing: 0) {
7281
if !taskManager.availableTasks.isEmpty {
7382
ForEach(taskManager.availableTasks, id: \.id) { task in
74-
TasksPopoverMenuItem(taskManager: taskManager, task: task)
83+
TasksPopoverMenuItem(taskManager: taskManager, task: task) {
84+
isTaskPopOverPresented = false
85+
}
7586
}
7687
Divider()
7788
.padding(.vertical, 5)

CodeEdit/Features/ActivityViewer/Tasks/TaskView.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,7 @@ struct TaskView: View {
2727
.frame(width: 5, height: 5)
2828
.padding(.trailing, 2.5)
2929
}
30+
.accessibilityElement()
31+
.accessibilityLabel(task.name)
3032
}
3133
}

CodeEdit/Features/ActivityViewer/Tasks/TasksPopoverMenuItem.swift

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77

88
import SwiftUI
99

10+
/// - Note: This view **cannot** use the `dismiss` environment value to dismiss the sheet. It has to negate the boolean
11+
/// value that presented it initially.
12+
/// See ``SwiftUI/View/instantPopover(isPresented:arrowEdge:content:)``
1013
struct TasksPopoverMenuItem: View {
11-
@Environment(\.dismiss)
12-
private var dismiss
13-
1414
@ObservedObject var taskManager: TaskManager
1515
var task: CETask
16+
var dismiss: () -> Void
1617

1718
var body: some View {
1819
HStack(spacing: 5) {
@@ -22,11 +23,12 @@ struct TasksPopoverMenuItem: View {
2223
.padding(.vertical, 4)
2324
.padding(.horizontal, 8)
2425
.modifier(DropdownMenuItemStyleModifier())
25-
.onTapGesture {
26-
taskManager.selectedTaskID = task.id
27-
dismiss()
28-
}
26+
.onTapGesture(perform: selectAction)
2927
.clipShape(RoundedRectangle(cornerRadius: 5))
28+
.accessibilityElement()
29+
.accessibilityLabel(task.name)
30+
.accessibilityAction(.default, selectAction)
31+
.accessibilityAddTraits(taskManager.selectedTaskID == task.id ? [.isSelected] : [])
3032
}
3133

3234
private var selectionIndicator: some View {
@@ -52,4 +54,9 @@ struct TasksPopoverMenuItem: View {
5254
}
5355
}
5456
}
57+
58+
private func selectAction() {
59+
taskManager.selectedTaskID = task.id
60+
dismiss()
61+
}
5562
}

CodeEdit/Features/ActivityViewer/Tasks/WorkspaceMenuItemView.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,10 @@ struct WorkspaceMenuItemView: View {
3030
.padding(.vertical, 4)
3131
.padding(.horizontal, 8)
3232
.modifier(DropdownMenuItemStyleModifier())
33-
.onTapGesture { }
33+
.onTapGesture { } // add accessibility action when this is filled in
3434
.clipShape(RoundedRectangle(cornerRadius: 5))
35+
.accessibilityElement()
36+
.accessibilityLabel(item?.name ?? "")
3537
}
3638
}
3739

0 commit comments

Comments
 (0)