Fix terminal origin jump when switching tabs#1517
Closed
0x0aa wants to merge 23 commits into
Closed
Conversation
Switch `set_system_backdrop` from the Windows 11 22H2+ DWM backdrop attribute (`DWMWA_SYSTEMBACKDROP_TYPE`) to the legacy `SetWindow CompositionAttribute` path with `ACCENT_ENABLE_BLURBEHIND`. The DWM path requires Windows 11 build 22523+; the legacy path works on Windows 10 v1809+ and every Windows 11 build, giving a consistent blur across all supported Windows versions. Dynamic-loads `SetWindowCompositionAttribute` from user32.dll via `GetProcAddress`; the symbol isn't in the public SDK. Falls back to a no-op when the function isn't present. Uses `AccentFlags = 2` (undocumented "use gradient color") so the tint renders properly — matches Tauri's `window-vibrancy` crate. Without it, blur ignores the gradient color and picks a washed-out default. Co-authored-by: NSPC911 <NSPC911@users.noreply.github.com>
Flake lock file updates:
• Updated input 'flake-parts':
'github:hercules-ci/flake-parts/f20dc5d' (2026-03-01)
→ 'github:hercules-ci/flake-parts/3107b77' (2026-04-01)
• Updated input 'flake-parts/nixpkgs-lib':
'github:nix-community/nixpkgs.lib/c185c7a' (2026-03-01)
→ 'github:nix-community/nixpkgs.lib/333c4e0' (2026-03-29)
• Updated input 'nixpkgs':
'github:NixOS/nixpkgs/b40629e' (2026-03-18)
→ 'github:NixOS/nixpkgs/4bd9165' (2026-04-14)
• Updated input 'rust-overlay':
'github:oxalica/rust-overlay/c807e83' (2026-03-21)
→ 'github:oxalica/rust-overlay/e611106' (2026-04-18)
* docs: add documentation to test_poll.rs * chore: remove test_echo_server.rs (fully commented out, no functional tests) * chore: remove test_close_on_drop.rs (fully commented out, no functional tests) * chore: remove test_double_register.rs (fully commented out, no functional tests) * chore: remove test_broken_pipe.rs (uses deprecated corcovado::deprecated module that no longer exists)
Contributor
Author
|
Fixed in main |
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
Fixes #1513 — with multiple tabs open, the terminal content in different tabs could land at slightly different top-left origins, so switching between tabs produced a visible jump.
Reproduced on Arch Linux / Sway (Wayland) at display scale 1.0. The affected code paths in
layout/mod.rsandscreen/mod.rsare platform-independent, so the fix should apply equally across platforms.The bug
ContextGrid::apply_taffy_layoutpositioned every panel using Taffy'slayout_rect:For a single-panel grid that rect isn't
(0, 0)— Taffy gives the panel node a non-zerolocationbased on the panel's own margin/padding, and the root container's gap. That offset then got added toscaled_marginon top of the window margin, so single-panel tabs ended up shifted away from the origin used when the first tab is set up inScreen::new(which writesrenderer.margindirectly tosugarloaf.set_position). The offset was small and only visible when flipping between tabs.A second, narrower mismatch existed in
Screen::create_tab: it fedcurrent_grid().scaled_margin.left(physical pixels) intosugarloaf.set_position, which expects logical pixels. At scale 1.0 the two happen to agree, but on HiDPI displays the new tab landed at a different x than tab 1.The fix
layout/mod.rs: inapply_taffy_layout, when there's only one panel, bypass Taffy'slayout_rectand use(0, 0)with the full available area minus the window margin. This is what actually resolves the cross-tab jump. Multi-panel grids still use Taffy's rect — they need it for split positioning and clipping.screen/mod.rs:create_tabnow usesself.renderer.margin.left(logical margin), matching the position set for the first tab inScreen::new. This aligns the initial rich-text position with tab 1 on HiDPI.Test plan
margin/paddingin config: same scenario — origin still stays fixed across tabs.