Build status menu asynchronously to keep clicks responsive#64
Open
scriptease wants to merge 1 commit into
Open
Build status menu asynchronously to keep clicks responsive#64scriptease wants to merge 1 commit into
scriptease wants to merge 1 commit into
Conversation
Menu content (simulator/app scan, plist parsing, icon loading) is now gathered on a background queue and cached. Clicking the status icon populates the menu instantly from cache (or a "Loading Simulators…" placeholder on first open) and refreshes in place when the scan completes, instead of blocking the main thread on every click. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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
Clicking the status bar icon blocks the main thread while the menu is built:
menuNeedsUpdatesynchronously scans simulator directories, parses per-app plists (O(apps × bundles) reads inApplication.buildMetadata), and loads/scales/rounds every app icon. With several simulators/apps the menu takes noticeably long to appear, and a second click gets queued behind the first — causing a laggy open/close ping-pong.Change
Menus.updateApplicationMenunow populates the menu instantly from a cached snapshot and triggers a refresh.gatherContent()on a background queue (.userInitiated).populate(menu,with:)does only cheapNSMenuItemconstruction on the main thread; when the scan completes, the open menu is refreshed in place.Menu now opens/closes immediately on every click; content updates a beat later on first open and stays fresh on every subsequent open.
🤖 Generated with Claude Code