Skip to content

macOS 26 fixes, Auto mode, per-tab visibility, split Never Use, notarized build script#24

Open
VWang1111 wants to merge 2 commits into
tobi:mainfrom
VWang1111:main
Open

macOS 26 fixes, Auto mode, per-tab visibility, split Never Use, notarized build script#24
VWang1111 wants to merge 2 commits into
tobi:mainfrom
VWang1111:main

Conversation

@VWang1111
Copy link
Copy Markdown

Summary

Two threads of work, bundled:

macOS 26 device handling

  • Fix blank MenuBarExtra popup on macOS 26.4 (.fixedSize on root view)
  • Separate default-device-changed listener from device-list-changed listener to prevent feedback loops when the app sets the default device
  • Re-entrancy guard in device-change handler to avoid cascades
  • Skip redundant setDefaultDevice calls when device is already active
  • Re-enforce input priority when macOS auto-switches mic for Bluetooth
  • Consolidate duplicate device entries for HDMI/DisplayPort devices that report fresh UIDs on each reconnect
  • Merge-aware savePriorities preserves disconnected device ordering

UX additions

  • New Auto output mode: combined priority list across speakers and headphones, no category split
  • Manual mode visually distinct: text label, divider, inline caption; mode bar wraps to a second row when 4 buttons would overflow
  • Settings popover with per-tab show/hide toggles (Speakers / Headphones / Auto / Manual / Microphones)
  • Never Use split into independent input + output lists; new linkNeverUse setting (default off) lets a headset's mic and speaker be blocked separately. Legacy single-list entries migrate on first launch

Tooling

  • Unit test target + PriorityManagerTests
  • Inject UserDefaults into PriorityManager for testability
  • build-notarized.sh: signs with Developer ID + hardened runtime, submits to Apple notary service, staples ticket

Test plan

  • Existing ./build.sh still produces a working ad-hoc-signed .app
  • Run on macOS 26.4 — popup is no longer blank
  • Connect/disconnect HDMI display audio — no duplicate entries pile up
  • Toggle Manual mode — banner appears, priority enforcement stops
  • Switch to Auto mode — outputs merge into one list, top connected becomes active
  • Settings → hide each tab individually, verify mode bar reflows
  • Mark a USB headset's mic as "Never Use" with linkNeverUse=off — output side still selectable
  • Toggle linkNeverUse on — same action now blocks both
  • PriorityManagerTests pass

🤖 Generated with Claude Code

VWang1111 and others added 2 commits May 10, 2026 14:19
Bundles two branches of work into one commit on main.

macOS 26 device handling
- Fix blank MenuBarExtra popup on macOS 26.4 (.fixedSize on root view)
- Separate default-device-changed listener from device-list-changed
  listener to prevent feedback loops when setting the default device
- Add re-entrancy guard to handleDeviceChange to avoid cascade
- Skip redundant setDefaultDevice calls when device is already active
- Re-enforce input priority when macOS auto-switches mic for Bluetooth
- Consolidate duplicate device entries for HDMI/DisplayPort devices that
  report fresh UIDs on each reconnect
- Merge-aware savePriorities preserves disconnected device ordering

UX additions
- New "Auto" output mode: combined priority list across speakers and
  headphones, no category split
- Manual mode visually distinct: text label, divider, inline caption;
  mode bar wraps to a second row when 4 buttons would overflow
- Settings popover with per-tab show/hide toggles (Speakers /
  Headphones / Auto / Manual / Microphones)
- Split "Never Use" into independent input + output lists; new
  linkNeverUse setting (default off) lets a headset's mic and speaker
  be blocked separately. Migrates legacy single-list entries on first
  launch

Testing
- Add unit test target and PriorityManagerTests
- Inject UserDefaults into PriorityManager for testability

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@VWang1111
Copy link
Copy Markdown
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant