Skip to content

feat(window): macOS traffic-light caption buttons#444

Open
a5af wants to merge 3 commits intomainfrom
feat/macos-traffic-light-controls-v2
Open

feat(window): macOS traffic-light caption buttons#444
a5af wants to merge 3 commits intomainfrom
feat/macos-traffic-light-controls-v2

Conversation

@a5af
Copy link
Copy Markdown
Member

@a5af a5af commented Apr 18, 2026

Summary

  • Adds classic red/yellow/green traffic-light window controls to the top-left of the title bar on macOS, matching native macOS HIG behaviour
  • Windows and Linux are unchanged — Win11-style Minimize/Maximize/Close buttons remain on the right
  • Platform split via Vite's platformResolve plugin (.platform.tsx.darwin/.win32/.linux)

Changes

File Change
window-controls.darwin.tsx Traffic lights (close/minimize/zoom circles); WindowControlsLeft renders them, WindowControlsRight returns null
window-controls.win32.tsx Win11 SVG caption buttons (moved from system-status.tsx); WindowControlsRight renders them, WindowControlsLeft returns null
window-controls.linux.tsx Re-exports from win32
window-controls.platform.tsx Barrel stub for TS type-checking
window-controls.darwin.scss 12 px circles, 8 px gap, #FF5F57/#FFBD2E/#28CA41; glyphs fade in on hover
window-controls.win32.scss Win11 button styles (moved from system-status.scss)
window-header.tsx Renders <WindowControlsLeft /> before <WindowDrag>
system-status.tsx Renders <WindowControlsRight /> instead of inlined WindowActionButtons
window-header.darwin.scss --default-indent: 0px — traffic lights are the left anchor

Windows / Linux impact

None. On win32 and linux, WindowControlsLeft returns null (no extra DOM) and WindowControlsRight renders the same Win11 buttons as before, just moved from system-status.tsx to the platform file. The system-status.scss Win11 styles moved identically to window-controls.win32.scss.

Test plan

  • macOS: traffic lights visible top-left; hover reveals ×/–/⤢ glyphs; close/minimize/zoom all work
  • Windows: Win11 Minimize/Maximize/Close on right, behaviour unchanged
  • Linux: same as Windows
  • No TS errors (npx tsc --noEmit)

🤖 Generated with Claude Code

AgentO-asaf and others added 2 commits April 18, 2026 12:31
Add classic red/yellow/green traffic-light window controls on the
LEFT of the macOS title bar, matching native macOS HIG behaviour.
Windows and Linux keep the existing Win11-style caption buttons on
the right.

Platform split via Vite's platformResolve plugin:
- window-controls.darwin.tsx — traffic lights (close/minimize/zoom),
  left-side; WindowControlsRight returns null
- window-controls.win32.tsx  — Win11 SVG buttons (46 px wide,
  full-height hit area), right-side; WindowControlsLeft returns null
- window-controls.linux.tsx  — re-exports from win32
- window-controls.platform.tsx — barrel stub for TS type-checking

window-header.tsx renders <WindowControlsLeft /> before <WindowDrag>
so the circles sit flush at the top-left. system-status.tsx renders
<WindowControlsRight /> instead of the former inlined WindowActionButtons.

Win11 button styles and macOS traffic-light styles moved to their
respective platform scss files. --default-indent set to 0 on darwin
since the traffic lights provide the left visual anchor.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown

@reagentx-workflow reagentx-workflow Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReAgent Diagnostics
Field Value
ReAgent Version 5.12.5
Trigger PR opened
Project Context CLAUDE.md loaded
Model claude-opus-4-6
Effort high
Ref Repos Disabled
Merge Analysis 3 regression(s) detected
Review Time 43.4s
Timestamp 2026-04-18T19:32:53Z
Repository agentmuxai/agentmux
PR #444

LGTM

…ndle

- bundle:darwin: implement framework copy (was stub) — copies CEF framework
  to dist/Frameworks/ and GPU libs (libGLESv2, libEGL) to dist/cef/
- main.rs: set framework_dir_path in CEF Settings so FrameworkBundlePath()
  can locate icudtl.dat — required on macOS 26 outside an .app bundle
- app.rs: add --use-mock-keychain to suppress Keychain access dialog on
  every launch (AgentMux stores no browser passwords)
- app.rs: add on_window_activation_changed to restore keyboard focus when
  switching back from another app (typing was routing to previous app)
- client.rs: split wrap_keyboard_handler! into per-platform blocks to fix
  NativeKeyEvent type mismatch across macOS/Linux/Windows
- browser_panes.rs: guard hwnd.0.is_null() behind #[cfg(windows)] to fix
  compilation on macOS/Linux

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown

@reagentx-workflow reagentx-workflow Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReAgent Diagnostics
Field Value
ReAgent Version 5.12.5
Trigger Re-review (new commits)
Project Context CLAUDE.md loaded
Model claude-opus-4-6
Effort high
Ref Repos Disabled
Merge Analysis 3 regression(s) detected
Review Time 63.4s
Timestamp 2026-04-18T20:14:02Z
Repository agentmuxai/agentmux
PR #444

LGTM

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants