Repository navigation
feat(menu-bar): show the app icon with a dot when an update is available - #1554
Merged
Merged
Conversation
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes Reviewed the complete diff and traced update-state propagation, redraw gating, rendering, and accessibility through the existing menu-bar and updater code.
- Update state: The status item observes the same availability state as the banner and carries it through ranking refreshes, including icon-only and screen-share concealment modes.
- Rendering and accessibility: A dotted template app icon appears after limits and overflow, or alone when no limits are shown; accessibility text includes update availability.
- Regression coverage and docs: Added pixel/layout tests and updated README, changelog, and behavior docs. Changed Swift files passed syntax parsing here; macOS rendering tests and live Sparkle integration could not be run on this Linux runner.
gpt-6-astra | 𝕏
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.

TL;DR — When Sparkle finds an update, the menu-bar status item always ends with the OpenUsage app icon, with a small dot at its top-right. It sits after the limits and any
+7count, and shows even when Show In Menu Bar would otherwise hide the app icon.What was happening
What this changes
MenuBarContentgainsupdateAvailable.StatusItemControllerreadsUpdaterController.availableUpdateVersion != nilinside its existing observation, so the strip redraws when an update is found and when it clears.MenuBarStripRendererdraws the app icon last in the strip (after the+Ncount) whenupdateAvailableis set. With nothing running out, App Icon Only, or Hide From Screen Share concealing, it shows the app icon on its own with the dot.Heads-up
UpdaterController(supportsGentleScheduledUpdateReminders+standardUserDriverShouldHandleShowingScheduledUpdate → false+standardUserDriverWillHandleShowingUpdate), which setsavailableUpdateVersionfrom the scheduled background check without showing any dialog. Other menu-bar apps do the same (read via GitHits:jordanbaird/iceIce/Updates/UpdatesManager.swift,exo-explore/exoapp/EXO/EXO/Services/SparkleUpdater.swift). A quietcheckForUpdateInformationprobe would add a second check cycle beside Sparkle's own schedule, so I didn't add one.UpdaterControlleris not changed. The dot followsavailableUpdateVersion, so it clears exactly when the banner does: on the banner's close (snooze), when the user attends to the update, and when the update session ends (installed or skipped). This keeps SCO-66's update restore free to change the menu, Settings, and banner code.availableUpdateVersion, so it does not add the dot; only the background check does.MenuBarContent.updateAvailablerather than a live appcast. Not checked in the running app with a real update.Tests
MenuBarUpdateIconTests(new): the plain app icon with no update; the dotted icon with nothing running out, at the app icon's size, a template, with ink at the top-right and identical pixels outside that corner; and with a strip plus+7, the strip widens, stays a template, and its rightmost column is the dot (top half) where it was the+7capsule before.On the Mac mini (macOS 15.7.7,
nice -n 10 script/test_quiet.sh --filter …):Screenshots
Offscreen renders of the status item image (a scratch test, not committed), top to bottom: app icon only without and with an update, three limits without and with an update, three limits plus
+7without and with an update.Light menu bar:

Dark menu bar:

Note
Low Risk
Menu-bar rendering and accessibility only; reuses existing
UpdaterController.availableUpdateVersionwith no changes to update or auth logic.Overview
When Sparkle’s background check finds an update (same signal as the in-panel Update Available banner), the menu bar status item now ends with the OpenUsage app icon and a small template dot at its top-right—after limit labels and any
+Noverflow, and even when App Icon Only, nothing is running out, or screen-share hiding would normally show only the plain icon.MenuBarContentgainsupdateAvailable(including VoiceOver text).StatusItemControllertakesUpdaterController, observesavailableUpdateVersion != nil, and passes the flag into strip rebuilds.MenuBarStripRendereraddsappIconWithUpdateDot(dot cut out from the mark) and appends that icon to the strip when the flag is set.User-initiated Check for Updates… does not set this state, so behavior there is unchanged. Docs (README, CHANGELOG, menu-bar.md, updates.md) and
MenuBarUpdateIconTestscover layout, template/dot pixels, and accessibility.Reviewed by Cursor Bugbot for commit 855b839. Bugbot is set up for automated code reviews on this repo. Configure here.