fix(permissions): stop repeated accessibility prompts, add grant actions to menu#47
Merged
Merged
Conversation
…ons to menu isAccessibilityGranted was called with kAXTrustedCheckOptionPrompt:YES in every passive code path (paste decision, menu refresh), causing the system permission dialog to appear repeatedly during normal use. Split into a quiet check (@no) used by passive callers and an explicit requestAccessibilityPermission (@yES) used only at app startup and from user-initiated actions. All four permission menu items (Microphone, Accessibility, Input Monitoring, Notifications) are now clickable when not granted: Accessibility triggers the system prompt directly; Microphone and Input Monitoring open the corresponding System Settings pane; Notifications invokes the system authorization request.
missuo
approved these changes
Apr 6, 2026
missuo
left a comment
Owner
There was a problem hiding this comment.
LGTM. Good UX improvement.
- Correctly separates quiet check (
@NO) from explicit request (@YES) - Permission menu items becoming actionable with
▸indicator is a nice touch - System Settings URL schemes for Microphone and Input Monitoring look correct
requestAccessibilityPermissionincheckAllPermissionsWithCompletion:is the right place for the one-time startup prompt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
isAccessibilityGrantedwas called withkAXTrustedCheckOptionPrompt: @YESin every passive code path — on each dictation session (paste decision) and every time the status bar menu opened. This caused the macOS accessibility permission dialog to appear repeatedly during normal use, which is inconsistent with the documented "degrade to copy-only when accessibility is not granted" behavior.Prompt separation:
isAccessibilityGrantednow uses@NO(quiet check) for all passive callersrequestAccessibilityPermissionmethod uses@YES, called only at app startup (checkAllPermissionsWithCompletion:) and from explicit user actionsPermission menu items:
All four permission items in the status bar menu are now clickable when not granted (with a
▸indicator), giving users a clear path to fix missing permissions:Test plan
xcodebuildpasses