Fix Escape handling in the clipping bezel - #16
Open
MiMoHo wants to merge 2 commits into
Open
Conversation
MiMoHo
force-pushed
the
escape-closes-bezel
branch
from
September 9, 2026 15:22
0eb017e to
6edd931
Compare
This was referenced Sep 9, 2026
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.
Problem
The clipping bezel had two Escape failures:
charactersIgnoringModifiers. Some macOS key events report the physical Escape key as key code53with an empty character string, so the bezel did not close and indexing the empty string could raise an exception.metaKeysReleasedpasted whenever the bezel was unpinned, even after Escape had hidden it. If the user had switched to Favorites, Escape also left the main store stashed instead of restoring it.These paths match:
Change
Verification
Initial Escape event fix:
53with an empty character stringf9bdcb32068d0064de94d6b400d4547d0759982e60bed4b5b74b7d1b89c34896: PASS, no findingsCancellation completion:
AppControllerand checks visible/unpinned, visible/pinned, hidden/unpinned, key-code Escape, and character Escape paths1e6071a6f270504e19063767ffe8717608dd37a3ce3461ef8e4e4f2970ba2060: PASS, no findingsLimitation
A full signed Xcode release build and visible physical-key end-to-end test were not available in this Command Line Tools environment. The regression uses native AppKit
NSEventfixtures, executes the real controller paths, and links the complete app target sources.