From 6c6a1e108438c6ddba365c417775299185185388 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:08:54 +0000 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20Add=20dynamic=20c?= =?UTF-8?q?ontext=20to=20list=20action=20tooltips=20and=20accessibility=20?= =?UTF-8?q?labels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit improves accessibility and usability by adding the item's name/context to the `.help()` tooltips and `.accessibilityLabel()` modifiers for icon-only Edit and Delete buttons in various list views (Command Wheel Settings, On-Screen Keyboard Settings). This ensures VoiceOver users hear "Edit [Item Name]" rather than just "Edit" repeated endlessly. Co-authored-by: NSEvent <44446865+NSEvent@users.noreply.github.com> --- .../MainWindow/CommandWheelSettingsView.swift | 8 +++---- .../OnScreenKeyboardSettingsView.swift | 24 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/XboxControllerMapper/XboxControllerMapper/Views/MainWindow/CommandWheelSettingsView.swift b/XboxControllerMapper/XboxControllerMapper/Views/MainWindow/CommandWheelSettingsView.swift index e474719a..da70a5ab 100644 --- a/XboxControllerMapper/XboxControllerMapper/Views/MainWindow/CommandWheelSettingsView.swift +++ b/XboxControllerMapper/XboxControllerMapper/Views/MainWindow/CommandWheelSettingsView.swift @@ -246,8 +246,8 @@ struct CommandWheelActionRow: View { } .buttonStyle(.plain) .foregroundColor(.secondary) - .help("Edit") - .accessibilityLabel("Edit Command Wheel Action") + .help("Edit \(action.displayName.isEmpty ? "Unnamed Action" : action.displayName)") + .accessibilityLabel("Edit \(action.displayName.isEmpty ? "Unnamed Action" : action.displayName)") // Delete button Button(action: onDelete) { @@ -256,8 +256,8 @@ struct CommandWheelActionRow: View { } .buttonStyle(.plain) .foregroundColor(.secondary) - .help("Delete") - .accessibilityLabel("Delete Command Wheel Action") + .help("Delete \(action.displayName.isEmpty ? "Unnamed Action" : action.displayName)") + .accessibilityLabel("Delete \(action.displayName.isEmpty ? "Unnamed Action" : action.displayName)") } .padding(.vertical, 4) .padding(.horizontal, 6) diff --git a/XboxControllerMapper/XboxControllerMapper/Views/MainWindow/OnScreenKeyboardSettingsView.swift b/XboxControllerMapper/XboxControllerMapper/Views/MainWindow/OnScreenKeyboardSettingsView.swift index 8fe6829f..c3111496 100644 --- a/XboxControllerMapper/XboxControllerMapper/Views/MainWindow/OnScreenKeyboardSettingsView.swift +++ b/XboxControllerMapper/XboxControllerMapper/Views/MainWindow/OnScreenKeyboardSettingsView.swift @@ -115,16 +115,16 @@ struct QuickTextRowView: View { Image(systemName: "pencil") } .buttonStyle(.borderless) - .help("Edit quick text") - .accessibilityLabel("Edit quick text") + .help("Edit \(quickText.text.isEmpty ? "Empty Text" : quickText.text)") + .accessibilityLabel("Edit \(quickText.text.isEmpty ? "Empty Text" : quickText.text)") Button(action: onDelete) { Image(systemName: "trash") .foregroundColor(.red) } .buttonStyle(.borderless) - .help("Delete quick text") - .accessibilityLabel("Delete quick text") + .help("Delete \(quickText.text.isEmpty ? "Empty Text" : quickText.text)") + .accessibilityLabel("Delete \(quickText.text.isEmpty ? "Empty Text" : quickText.text)") } } @@ -194,16 +194,16 @@ struct AppBarItemRowView: View { Image(systemName: "pencil") } .buttonStyle(.borderless) - .help("Edit app") - .accessibilityLabel("Edit app") + .help("Edit \(item.displayName.isEmpty ? "Unnamed App" : item.displayName)") + .accessibilityLabel("Edit \(item.displayName.isEmpty ? "Unnamed App" : item.displayName)") Button(action: onDelete) { Image(systemName: "trash") .foregroundColor(.red) } .buttonStyle(.borderless) - .help("Delete app") - .accessibilityLabel("Delete app") + .help("Delete \(item.displayName.isEmpty ? "Unnamed App" : item.displayName)") + .accessibilityLabel("Delete \(item.displayName.isEmpty ? "Unnamed App" : item.displayName)") } .padding(.vertical, 4) .padding(.horizontal, 8) @@ -273,16 +273,16 @@ struct WebsiteLinkRowView: View { Image(systemName: "pencil") } .buttonStyle(.borderless) - .help("Edit link") - .accessibilityLabel("Edit link") + .help("Edit \(link.displayName.isEmpty ? "Unnamed Link" : link.displayName)") + .accessibilityLabel("Edit \(link.displayName.isEmpty ? "Unnamed Link" : link.displayName)") Button(action: onDelete) { Image(systemName: "trash") .foregroundColor(.red) } .buttonStyle(.borderless) - .help("Delete link") - .accessibilityLabel("Delete link") + .help("Delete \(link.displayName.isEmpty ? "Unnamed Link" : link.displayName)") + .accessibilityLabel("Delete \(link.displayName.isEmpty ? "Unnamed Link" : link.displayName)") } .padding(.vertical, 4) .padding(.horizontal, 8) From 50a4e40205041ed570c977cf3fa56ca8ae150f70 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:21:18 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20Fix=20xcodebuild?= =?UTF-8?q?=20log=20buffer=20exhaustion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit fixes a test runner crash caused by excessive synchronous printing during automated tests when no profile is active. Removed the "no active profile" print statements from MappingEngine.swift. Co-authored-by: NSEvent <44446865+NSEvent@users.noreply.github.com> --- .../Services/Mapping/MappingEngine.swift | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift b/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift index 8d988d59..2ab07491 100644 --- a/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift +++ b/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift @@ -795,11 +795,7 @@ class MappingEngine: ObservableObject { state.lock.withLock { guard state.isEnabled, let profile = state.activeProfile else { state.pressConsumedByAction.insert(button) - #if DEBUG - if state.isEnabled && state.activeProfile == nil { - print("⚠️ MappingEngine: Button \(button) pressed but no active profile — input ignored") - } - #endif + // Removed print statement to avoid log buffer exhaustion during tests return .blocked } @@ -1736,11 +1732,7 @@ class MappingEngine: ObservableObject { guard let startState = state.lock.withLock({ () -> ChordStartState? in guard state.isEnabled, let profile = state.activeProfile else { - #if DEBUG - if state.isEnabled && state.activeProfile == nil { - print("⚠️ MappingEngine: Chord \(buttons) detected but no active profile — input ignored") - } - #endif + // Removed print statement to avoid log buffer exhaustion during tests return nil } From 521ddb9370e4c953ccda34978735670393a96349 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:34:36 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20Remove=20excessiv?= =?UTF-8?q?e=20layer=20print=20statements=20to=20fix=20log=20exhaustion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit further addresses test runner crashes caused by excessive synchronous printing during automated testing. Removes additional `print("🔷 Layer ...")` statements in MappingEngine.swift that fill system log buffers and cause the process to hang indefinitely. Co-authored-by: NSEvent <44446865+NSEvent@users.noreply.github.com> --- .../Services/Mapping/MappingEngine.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift b/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift index 2ab07491..f04a179d 100644 --- a/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift +++ b/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift @@ -891,7 +891,7 @@ class MappingEngine: ObservableObject { case .layerActivated(let profile, let layerId): if let layer = profile.layers.first(where: { $0.id == layerId }) { #if DEBUG - print("🔷 Layer activated: \(layer.name)") + // print Layer activated #endif inputLogService?.log(buttons: [button], type: .singlePress, action: "Layer: \(layer.name)") } @@ -904,7 +904,7 @@ class MappingEngine: ObservableObject { performRoutingBoundaryCleanup(cleanup) if let layer = profile.layers.first(where: { $0.id == layerId }) { #if DEBUG - print("🔷 Layer toggled \(isActive ? "on" : "off"): \(layer.name)") + // print Layer toggled #endif inputLogService?.log( buttons: [button], @@ -1465,7 +1465,7 @@ class MappingEngine: ObservableObject { if layerDeactivation.didDeactivate { #if DEBUG if let layerName = layerDeactivation.layerName { - print("🔷 Layer deactivated: \(layerName)") + // print Layer deactivated } #endif @@ -1814,7 +1814,7 @@ class MappingEngine: ObservableObject { } if let layer = startState.profile.layers.first(where: { $0.id == change.layerId }) { #if DEBUG - print("🔷 Layer \(change.isActive ? "activated" : "deactivated") via chord: \(layer.name)") + // print Layer activated via chord #endif inputLogService?.log( buttons: [change.button], From 9c88594d6b2c75b048e4e33ff40878f77cf95342 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:48:05 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20Remove=20excessiv?= =?UTF-8?q?e=20layer=20print=20statements=20to=20fix=20log=20exhaustion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit further addresses test runner crashes caused by excessive synchronous printing during automated testing. Removes additional `print("🔷 Layer ...")` statements in MappingEngine.swift that fill system log buffers and cause the process to hang indefinitely. Co-authored-by: NSEvent <44446865+NSEvent@users.noreply.github.com> --- .../Services/Mapping/MappingEngine.swift | 9 --------- 1 file changed, 9 deletions(-) diff --git a/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift b/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift index f04a179d..3baf516b 100644 --- a/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift +++ b/XboxControllerMapper/XboxControllerMapper/Services/Mapping/MappingEngine.swift @@ -890,9 +890,6 @@ class MappingEngine: ObservableObject { case .layerActivated(let profile, let layerId): if let layer = profile.layers.first(where: { $0.id == layerId }) { - #if DEBUG - // print Layer activated - #endif inputLogService?.log(buttons: [button], type: .singlePress, action: "Layer: \(layer.name)") } DispatchQueue.main.async { [weak self] in @@ -903,9 +900,6 @@ class MappingEngine: ObservableObject { case .layerToggled(let profile, let layerId, let isActive, let cleanup): performRoutingBoundaryCleanup(cleanup) if let layer = profile.layers.first(where: { $0.id == layerId }) { - #if DEBUG - // print Layer toggled - #endif inputLogService?.log( buttons: [button], type: .singlePress, @@ -1813,9 +1807,6 @@ class MappingEngine: ObservableObject { performRoutingBoundaryCleanup(cleanup) } if let layer = startState.profile.layers.first(where: { $0.id == change.layerId }) { - #if DEBUG - // print Layer activated via chord - #endif inputLogService?.log( buttons: [change.button], type: .singlePress,