Repository navigation
fix(desktop): preserve macOS fullscreen window chrome - #3330
Merged
Merged
Conversation
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.
Summary
Fix macOS traffic-light misalignment and navigation overlap after native fullscreen transitions. The desktop host derives the button inset from the shared 45px toolbar token and AppKit metrics, publishes native transition phases, and keeps buttons suppressed until the frontend has painted the reserved space.
Vendor Tao 0.36.0 with a focused macOS patch that restores the inset after queued style changes and native titlebar layout, even when Wry replaces the content view. The upstream sources and Apache-2.0 licenses are retained;
third_party/tao/OPENBITFUN-PATCH.mdrecords the patch and removal condition. Dependency audits continue to inspect its resolved feature closure.Type and Areas
Bug fix / desktop, Web UI, native window dependency and boundary checks.
Motivation / Impact
Native fullscreen exit can reset traffic-light geometry after the framework has already restored it. Frontend resize polling can also restore the overlay titlebar too late, placing controls over returning native buttons. AppKit now owns phase timing, while the frontend waits for toolbar transitions and paint before acknowledging clearance. Older frontend and host combinations retain string-payload and no-ack compatibility.
Verification
pnpm --dir src/web-ui run test:run src/infrastructure/runtime/fullscreenChrome.test.ts src/app/hooks/useFullscreenChrome.test.tsx src/app/layout/WorkspaceBody.presentation.test.ts— 12 tests passed.pnpm run check:web— passed, including type checking and appearance/theme governance.pnpm run check:core-boundaries:test— 149 tests passed.pnpm run check:core-boundaries— passed.pnpm run check:repo-hygiene— passed.cargo check --locked -p openbitfun-desktop— passed on macOS.cargo test --locked -p openbitfun-desktop --no-default-features --lib macos_window_chrome::tests— 4 tests passed.cargo test --manifest-path third_party/tao/Cargo.toml --test macos_chrome_layout— passed on macOS with display access; covers repeated native relayout with custom/default chrome after content-view replacement.node scripts/check-git-object-sizes.mjs --base origin/main --head HEADandgit diff --check— passed.pnpm run motion:audit— reviewed inventory; transitions honor reduced motion.Reviewer Notes
AI-assisted; focused automated testing completed. A manual fullscreen animation recording and full remote end-to-end tests were not performed. CI provides the broader cross-platform coverage.
Remote workspace, remote control, Peer Device Mode, and Detached Dispatch were not exercised end to end. This presentation handshake is local to the macOS controller window and does not add product commands or route through session/peer transport. The transport test verifies no subscription is armed on web hosts. Legacy string payloads and clients without paint-ack support are covered.
Dependency ownership:
openbitfun-desktop::macos_window_chromealone selects the added AppKit/Foundation features and existing Block2 version undercfg(macos). Only the macOS desktop consumes these APIs. They add no new library version or native build toolchain; existing Objective-C wrappers provide the notification blocks and native window access. Tao remains the existing cross-platform window dependency at version 0.36.0, with changes confined to its macOS backend. Desktop compilation, native layout tests, and the dependency-boundary checks are the focused verification.Checklist