Skip to content

cmux NEXT menus: downloads, reload, history and device menus take the glass highlight and icons - #23106

Merged
teamleaderleo merged 5 commits into
feat-cmux-nextfrom
cmux/context-menus-toolbar
Oct 21, 2026
Merged

teamleaderleo merged 5 commits into
feat-cmux-nextfrom
cmux/context-menus-toolbar

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

The browser toolbar's own menus were the last plain AppKit menus in cmux NEXT: right-click or long-press Reload, Back or Forward, open Downloads or Emulate Device, and the highlight was the system blue with few or no icons, unlike the sidebar, tab, terminal, page and bookmarks menus (#22787, #22944). Now they draw the same theme-tinted glass highlight (ThemedMenuRowView, Palette.menuHighlight) in the toolbar's theme, and every row has an icon.

  • Downloads: each download keeps its file-type icon, subtitle progress and submenu; Open, Show in Finder, Pause/Resume, Retry, Cancel, Copy Link and Clear get symbols (Open Downloads Folder already had its action's). The toolbar presents it themed (BrowserToolbarButtonsView.present(_:from:themed:)).
  • Reload: Reload Page and Hard Reload Page use their actions' symbols (arrow.clockwise, arrow.clockwise.circle).
  • Back / Forward history: one row per entry with a page glyph.
  • Emulate Device: device-class glyphs (iphone, ipad, laptopcomputer, desktopcomputer, tv, a split rectangle for foldables), the fit and orientation rows have their own, and All Devices and brand submenus are themed. Search results that appear while the menu is open are themed too (NSMenu.themeAddedRows()). Section headers stay AppKit's: themeRows now skips them, along with separators and the search field.

A chosen themed row runs after the menu closes. Every menu here is presented with popUp and nothing after popUp depends on the action having run, so no afterThemedRowRuns step was needed. Each row's target is held by the item (representedObject), so it outlives the menu.

The same PR fixes three menu-only labels that palette-audit flagged:

  • Space menu: "Change Space Icon…" is now Set Icon…, "Remove Space Icon" is Remove Icon and "Edit Theme Color…" is Color. These are the shared words every other object's menu uses (IconMenuLabels, ObjectMenuLabels.color). The three menu.space.* keys were removed from ProfileActions.xcstrings.
  • Agent chat zoom: the chat's own menu says Zoom In / Zoom Out / Actual Size. The pane's Layout submenu said "Zoom In Chat / Zoom Out Chat / Reset Chat Zoom" and now says Chat Zoom In / Chat Zoom Out / Chat Actual Size: the same words, led by "Chat" the way the canvas rows say "Canvas Zoom In", since that submenu also zooms the pane. The English and every locale in Localizable.xcstrings were updated. Only "Chat Actual Size" needed new translations; for Zoom In and Zoom Out the translations already read correctly.

The generated plans/cmux-next/action-surfaces.json carries the old labels. PR autofix regenerates it, so it isn't edited by hand.

Changelog

Changed: The browser toolbar's Downloads, Reload, Back/Forward and Emulate Device menus use the cmux NEXT menu highlight and show an icon on every row.

Observed / Not run

  • Observed: fleet cmux-ci compile-check --app and the Swift testing suites (run-swift-testing-suites.sh, 4 shards) on the head; results are in a comment below. New tests: BrowserToolbarMenusThemeTests (Reload, Hard Reload, a clicked row running after close, Back history, Device menu with search results) and BrowserDownloadsMenuThemeTests (a finished download's menu, the empty menu, and a running download's row menu whose Cancel row cancels it; the fleet's test hosts have no general pasteboard, so Copy Link can't be read back there). Each checks that every row is a ThemedMenuRowView with an icon, or the device search field, and that choosing a row runs its action. prepush-gate.py, check-app-size.sh (CmuxNextApp shrinks by 1 source line) and check-menu-actions.py all ran locally. The only red in the menu-actions check is ChiefPaneTools.swift, which is red on base 7f3a43a (cmux NEXT: the Chief's status, subagents and actions in its pane's tab row #22852) and is being fixed in cmux-next Chief: Subagents menu rows run chief.openSubagent, not an inline selector #23073, so it isn't touched here.
  • Not run: no live capture of the menus in a DEV build. The look comes from the shared ThemedMenuRowView, which is already in use and tested in ThemedMenuTests.

Agent session: cosmic-gray

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

The browser toolbar's Downloads, Reload, Back/Forward history, and Emulate Device menus were the last plain AppKit menus in cmux NEXT — they showed the system-blue highlight with few or no icons. They now draw the same theme-tinted glass highlight in the toolbar's theme, and every row has an icon.

  • Each download keeps its file-type icon, progress subtitle, and submenu; all its commands gained symbols, and a download row's right-click menu is themed too.
  • The device menu uses device-class glyphs; search results added while the menu is open are themed as well.
  • Menu section headers and separators stay AppKit's.

Label fixes

  • The space menu's icon and color rows now use the shared words (Set Icon…, Remove Icon, Color) that every other object's menu uses, with the old menu.space.* strings removed.
  • The pane's chat-zoom rows now read Chat Zoom In / Chat Zoom Out / Chat Actual Size, matching the chat menu's wording led by "Chat"; translations were updated.

Written for commit 6489737. Summary will update on new commits.

View guided diff Turn on auto-fix

teamleaderleo and others added 2 commits October 20, 2026 23:56
… glass highlight and icons

The browser toolbar's Downloads, Reload, Back/Forward history and Emulate
Device menus were plain AppKit menus: system-blue highlight and mostly no
icons. They now draw their rows as ThemedMenuRowView in the toolbar's theme
(NSMenu.themeRows(in:)), every row with an icon: a download's file-type icon
and its commands' symbols, the reload actions' symbols, a page glyph per
history entry, and a device-class glyph per device. The toolbar presents the
downloads and device menus themed (present(_:from:themed:)), device search
results added while the menu is open are themed too (themeAddedRows), and
section headers stay AppKit's.

Menu labels palette-audit found: the space menu's icon and color rows use
the shared words (Set Icon…, Remove Icon, Color) like every other object's
menu, and the pane Layout submenu's chat zoom rows read Chat Zoom In, Chat
Zoom Out and Chat Actual Size, the chat menu's words (Zoom In, Zoom Out,
Actual Size) led by Chat as the canvas rows are.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c08-98d9-7e82-ac8f-c5e8f40c3cab&host=cosmic-gray
@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 21, 2026
@cursor

cursor Bot commented Oct 21, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by context-menus on cosmic-gray · session

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-zcn7y created for this PR by the cmux coordinator.

The Downloads menu became a popup on base: its rows' right-click menu now takes the menu look and icons.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c08-98d9-7e82-ac8f-c5e8f40c3cab&host=cosmic-gray
@cursor

cursor Bot commented Oct 21, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review d10a5ec: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr23106 -f ref=cmux/context-menus-toolbar -f platform=macos -f backend_mode=local

Not verified: macOS jobs did not run: compile and app tests were skipped on d10a5ec7d4; ci-status is green without them.

CI passes on d10a5ec7d4 (run 39567523454 attempt 1).
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped (the macos job needs both to succeed). Re-run CI once they pass, before merging.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

teamleaderleo and others added 2 commits October 21, 2026 01:12
…k does

performActionForItem needs a running NSApplication, which CmuxNextAppTests lacks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c08-98d9-7e82-ac8f-c5e8f40c3cab&host=cosmic-gray
…ugh Cancel, not the pasteboard

The fleet's test hosts have no general pasteboard, so Copy link's write read back nil.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15c08-98d9-7e82-ac8f-c5e8f40c3cab&host=cosmic-gray
@blacksmith-sh

blacksmith-sh Bot commented Oct 21, 2026

Copy link
Copy Markdown

Found 4 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp4e8lk9bz/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpjd5wir39/summary-fail.json (live):/summary-fail.json (live): View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
test_every_source_and_test_directory_is_a_target (main.GraphCoversThePackage.test_e
very_source_and_test_directory_is_a_target) (directory='CmuxNextHomeEngineTests')/
test_every_source_and_test_directory_is_a_target (main.GraphCoversThePackage.test_e
very_source_and_test_directory_is_a_target) (directory='CmuxNextHomeEngineTests')
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Fleet results on head 6489737 (run-swift-testing-suites.sh, 4 shards):

  • BrowserDownloadsMenuThemeTests and BrowserToolbarMenusThemeTests pass.
  • The other failing suites are base or environment reds that don't involve this diff: everyMenuKeepsAShortTopLevel (red on base), SettingsSchemaExport / ManagedPreferencesManifest (stale generated settings files, which this PR doesn't touch), NativeTooltipGuard (base .help( in BrowserDownloadsPopup.swift:329/:343), and timing and host suites (Sidebar*, Palette*, NewTab*, Home*, ClassicUpgradeSimulation and others) that also failed on the earlier head d10a5ec.

The independent review passed. Merging.

Agent session: cosmic-gray

@teamleaderleo
teamleaderleo merged commit b835669 into feat-cmux-next Oct 21, 2026
@teamleaderleo
teamleaderleo deleted the cmux/context-menus-toolbar branch October 21, 2026 09:18
@github-actions

Copy link
Copy Markdown
Contributor

Shipped in:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant