Skip to content

Make the popover behave more like a native Mac panel - #46

Merged
SorcRR merged 2 commits into
masterfrom
claude/ui-ux-improvements-dmkkol
Oct 13, 2026
Merged

SorcRR merged 2 commits into
masterfrom
claude/ui-ux-improvements-dmkkol

Conversation

@SorcRR

@SorcRR SorcRR commented Oct 12, 2026

Copy link
Copy Markdown
Owner

Small UX pass on the menu bar popover, based on Apple's popover guidance and how Control Center behaves. The bigger layout change (collapsible sections) will come in a separate PR.

What changes

  • Esc goes back on sub-pages. On Colour, Buttons, Battery Usage, Profiles and What's New, Esc now backs out one level instead of closing the whole popover. The exceptions: while a key combination is being recorded, Esc cancels the recording, and while a profile is being renamed, Esc cancels the rename.
  • One Back button everywhere. What's New now uses the shared BackButton like every other sub-page.
  • ⌘R refreshes and ⌘, opens Settings from the popover, matching the right-click menu. ⌘R is bound once for the whole main page, so it also works for a mouse without a battery, which has no battery card and so no refresh button.
  • Hover highlight on chips and rows (DPI, custom DPI, sleep timer, profiles, Configure Buttons). It's skipped when the control is disabled, and each chip's whole highlighted area is clickable.
  • Accessibility:
    • The colour swatches are real buttons with names.
    • Icon-only buttons, chips and the status dot have VoiceOver labels.
    • The selected chip is announced as selected.
    • DPI chips that can be edited say "Right-click to edit" in their tooltip.
  • Sleep timer wording: "5 min" in the header and "5m" on the chips, instead of "5m 00s".
  • No-mouse state: when no mouse is known at all, one card says how to connect and offers "Look Again", or the Input Monitoring button when that permission is missing. A saved battery reading still shows above it. A mouse that's asleep or out of range keeps today's dimmed layout.

The CHANGELOG [Unreleased] section and docs/DOCUMENTATION.md §6.2 are updated.

Testing

  • Not built: this was written without a Swift toolchain, so please run swift build && swift test and click through the popover before merging. CI will build it.
  • Tests/Scripts/changelog-test.sh passes.
  • Check on a Mac:
    • Esc on each sub-page goes back.
    • Esc while recording a shortcut cancels the recording and stays on the Buttons page.
    • ⌘R works with a wired mouse that has no battery.
    • The no-mouse card appears after unplugging the dongle.

Known, not fixed here

  • Rename and Esc: if you start renaming a profile and then click elsewhere, Esc no longer goes back while the rename stays open. It closes the popover, which is the old behaviour.
  • Launch flash: right after launch, before the mouse is detected, the no-mouse card can show briefly.

🤖 Generated with Claude Code

https://claude.ai/code/session_01SJ8Eskh7E8TDXYvX2yS9yZ


Generated by Claude Code

- Esc on a sub-page goes back one level instead of closing the popover,
  except while a key recording or a profile rename owns Esc. What's New
  now uses the shared BackButton like every other sub-page.
- ⌘R refreshes and ⌘, opens Settings from the popover, matching the
  right-click menu.
- Chips and the Configure Buttons row get a hover highlight; colour
  swatches are real buttons with names; icon-only buttons get VoiceOver
  labels and tooltips; DPI chips say when right-click edits them.
- Sleep timer reads "5 min" / chips "5m" instead of "5m 00s".
- With no mouse known at all, one empty-state card with "Look Again"
  (or the Input Monitoring grant) replaces the column of disabled
  placeholder controls.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SJ8Eskh7E8TDXYvX2yS9yZ
- ⌘R is one hidden button on the main page, so it works whichever
  cards are showing (a battery-less mouse has no refresh button).
- The no-mouse card also shows under a saved battery reading; only one
  Input Monitoring button appears there.
- Chip labels fill their chip, so the whole hover-highlighted area is
  clickable (DPI, custom DPI, sleep timer, profiles).
- Swatches carry their own names; an editing DPI stage reads "Stage N
  DPI" to VoiceOver; Back's tooltip mentions Esc only when Esc works.
- Drop a comment that said Configure Buttons stays enabled offline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SJ8Eskh7E8TDXYvX2yS9yZ
@SorcRR
SorcRR merged commit ba447e3 into master Oct 13, 2026
1 check passed
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.

2 participants