Skip to content

fix(tabs): restore scrolling and pane transfers - #95

Merged
wzz6423 merged 7 commits into
mainfrom
fix/tab-strip-scroll-buttons
Sep 19, 2026
Merged

wzz6423 merged 7 commits into
mainfrom
fix/tab-strip-scroll-buttons

Conversation

@wzz6423

@wzz6423 wzz6423 commented Sep 18, 2026

Copy link
Copy Markdown
Owner

Summary

  • Restore top-level tab hover feedback, compact selected styling, and horizontal tab-strip navigation for trackpads and mouse wheels, including a hover-only scrollbar with a larger grab area.
  • Route native-header events through the window frame container so tab clicks, close buttons, scrolling, title-bar controls, resizing, and fullscreen transitions use the intended AppKit views.
  • Clear stale close-button hover feedback after tabs are hidden, moved, scrolled, reattached, or the window loses focus.
  • Show tab groups as color-only disclosure arrows without names or rename actions, remove the obsolete display-name setting, and reduce the compact control from 34 points to 17 points while preserving its height and centered arrow.
  • Add nine Chrome-style color presets to sidebar-group and tab-group color panels only; keep arbitrary color selection and ordinary project/tab color panels unchanged.
  • Prevent narrow split panes from expanding into neighboring panes or sidebars while preserving their live terminal surfaces.
  • Keep tab grouping in context menus and allow eligible panes or tabs to move across the current header, sidebar projects, and newly created projects without recreating terminal, editor, browser, or split state.
  • Fade the full-header drop preview while respecting Reduce Motion, and update the English and Chinese user documentation for the final tab-group behavior.

GitHub Project

  • Project: zshell Development

PR Type

  • Type: fix

Validation

  • Status: passed

  • Command: python3 mac/tests/test_workspace_hover.py

  • Result: 54 checks passed against the production workspace controls. Coverage includes the 17-point compact group width, bounded row and close-button hover regions, layout and scroll changes, hide/unhide and reattachment, window deactivation, and selected-tab painting.

  • Status: passed

  • Command: python3 mac/tests/test_workspace_hover.py --source-ref db2631b

  • Result: The negative-control run exited 1 as expected with 39 checks passing and 15 failing, including the old 34-point group width and the stale close-button hover cases.

  • Status: passed

  • Command: python3 mac/tests/test_pane_bounds.py

  • Result: 214 checks passed using the production pane chrome, terminal container, and prompt-queue constraints at 32, 80, 160, and 360-point widths. The negative-control run against 5d52516 exited 1 as expected with 118 passing and 96 failing checks.

  • Status: passed

  • Command: python3 mac/tests/test_tab_strip_scrolling.py

  • Result: 50 checks passed in borderless and titled offscreen AppKit fixtures, covering event routing, tab and close-button clicks, bidirectional pixel scrolling, vertical wheel mapping, clamping, thumb dragging before hover callbacks, and overlay cleanup.

  • Status: passed

  • Command: python3 mac/tests/test_tab_strip_scrolling.py --source-ref 6cde33b

  • Result: The negative-control run exited 1 as expected with 20 checks passing and 30 failing, confirming the fixture detects the original routing and scrollbar failures.

  • Status: passed

  • Command: git diff --check && xcrun swiftc -parse mac/zshell/WorkspaceChromeViews.swift

  • Result: Whitespace validation and Swift syntax parsing completed without diagnostics.

  • Status: passed

  • Command: make update

  • Result: The final Debug app built and launched from /Users/wzz/个人/code/zshell with DerivedData at mac/build/debug; the running executable was verified at mac/build/debug/Build/Products/Debug/zshell Debug.app/Contents/MacOS/zshell.

  • Status: passed

  • Command: codesign --verify --deep --strict --verbose=2 'mac/build/debug/Build/Products/Debug/zshell Debug.app'

  • Result: The final Debug bundle is valid on disk and satisfies its designated requirement.

  • Status: passed

  • Command: Main-worktree Debug app, tab-group and color-panel interaction.

  • Result: The 17-point group arrow remained clickable and toggled collapse state without a blue focus ring. No group name was shown. All nine presets fit in one row; red and orange showed the matching outer selection ring with a white inner ring, and choosing orange updated the tab-group marker to #FA903E immediately.

  • Status: passed

  • Command: Main-worktree Debug app, pointer-driven four-pane divider resize and tab switching.

  • Result: The divider was dragged in both directions and restored. Terminal content and pane borders followed without overlapping adjacent panes or sidebars, and moving the pointer away left no unrelated tab or close-button hover backgrounds.

  • Status: passed

  • Command: jq empty mac/zshell/Localizable.xcstrings && (cd web && bun run typecheck && bun run build)

  • Result: The String Catalog is valid JSON, website type checking passed, and the production build prerendered all 38 routes successfully.

  • Status: not run

  • Reason: Physical trackpad gestures, full-header pane-drop animation, and terminal-backend-specific transfer paths still require manual acceptance. They are separate from the group-control, divider, hover, and color-panel paths verified above.

Risk and Rollback

  • Risk: The native header now shares the window frame container with the hosting view. The compact group target is intentionally half its previous width, and the shared color panel installs an accessory only for group colors. Resizing, fullscreen transitions, physical trackpad feel, and cross-backend transfers still need broader acceptance.
  • Rollback: Revert this pull request.

Related Issue

None

AI Attribution

@github-actions

Copy link
Copy Markdown

Automated reply: the following guidance comes from CONTRIBUTING.md.

Thank you for opening a pull request. Check these requirements while it is awaiting review.

  • The PR title must use an English Conventional Commit subject, for example:

    • feat(terminal): add per-pane scrollback search
    • fix(git): resolve stale diff after a branch switch
    • docs: update contributing guidelines
      Allowed types are feat, fix, docs, style, refactor, perf, test, chore, build, ci, and revert.
  • The PR body must be in English and contain the Summary, GitHub Project, PR Type, Validation, Risk and Rollback, Related Issue, and AI Attribution sections that .github/PULL_REQUEST_TEMPLATE.md provides.

    • GitHub Project keeps the template value - Project: zshell Development. Project Automation reads it to place the pull request on the shared board.
    • PR Type declares exactly one - Type: value, and it must match the type in the title. PR Automation turns it into a label, for example fix into bug.
    • Every Validation block must declare passed, failed, or not run. passed and failed need Command and Result; not run needs Reason.
    • Related Issue must either close an issue with a keyword such as Closes #123, which also applies the development label, or be exactly None.
    • AI Attribution must declare - Agent:. Any agent other than None requires a matching - Co-authored-by: Name <email> line, which must also appear as a trailer on at least one commit, and applies the ai-assisted label.

    Example:

    ## Summary
    - Add a repository hygiene check.
    
    ## GitHub Project
    - Project: zshell Development
    
    ## PR Type
    - Type: ci
    
    ## Validation
    - Status: passed
    - Command: bash .github/scripts/check-repository-hygiene.sh
    - Result: Repository hygiene check passed.
    
    ## Risk and Rollback
    - Risk: Only repository automation is affected.
    - Rollback: Revert this pull request.
    
    ## Related Issue
    Closes #123
    
    ## AI Attribution
    - Agent: Claude Code
    - Co-authored-by: Claude <noreply@anthropic.com>
  • The PR Quality check validates this format; a pull request cannot be merged while the check is failing. PR Automation then applies the labels and assigns the pull request.

  • There is no unit test target: app changes are proven by building and running Zshell and exercising the change, so say in Validation what you did and attach screenshots or a recording for UI work. Run cargo test --locked in mac/Vendor/alacritty-bridge for bridge changes, bun run typecheck && bun run build in web/ for site changes, and bunx tsc --noEmit in mac/ for anything under mac/scripts/. Install dependencies with bun install --frozen-lockfile in each package before running Bun checks.

  • Build all new UI in AppKit. SwiftUI is legacy and must not be introduced or expanded; materially changing an existing SwiftUI view means migrating the affected UI to AppKit.

  • Update the relevant documentation when changing user-visible behavior, build instructions, or the release process. CHANGELOG.md is written for end users, so it records the shipped outcome rather than the fixes and refactors on the way there, and the version is bumped only by a release, never by a pull request.

  • Do not commit mac/build/, mac/Vendor/alacritty-bridge/target, node_modules, dist, downloaded files, logs, tokens, signing materials, or personal data. Repository Hygiene fails on them.

  • main and publish-v* are protected and can only be updated through a reviewed pull request that passes its checks.

@github-actions github-actions Bot added ai-assisted An AI agent co-authored this change bug Something isn't working labels Sep 18, 2026
@wzz6423 wzz6423 moved this to Bug Fix in zshell Development Sep 18, 2026
@wzz6423
wzz6423 force-pushed the fix/tab-strip-scroll-buttons branch from ce540cf to a559b22 Compare September 18, 2026 09:02
@wzz6423 wzz6423 changed the title fix(tabs): restore tab scroll button clicks fix(tabs): add hover tab overflow scrolling Sep 18, 2026
@wzz6423
wzz6423 force-pushed the fix/tab-strip-scroll-buttons branch from a559b22 to f2e3557 Compare September 18, 2026 09:24
@wzz6423 wzz6423 changed the title fix(tabs): add hover tab overflow scrolling fix(tabs): restore tab hover and scrolling Sep 18, 2026
@wzz6423
wzz6423 force-pushed the fix/tab-strip-scroll-buttons branch from f2e3557 to 0ab1eb1 Compare September 18, 2026 09:48
Co-authored-by: Codex <noreply@openai.com>
@wzz6423
wzz6423 force-pushed the fix/tab-strip-scroll-buttons branch from 0ab1eb1 to f4a7530 Compare September 18, 2026 10:11
Co-authored-by: Codex <noreply@openai.com>
@wzz6423 wzz6423 changed the title fix(tabs): restore tab hover and scrolling fix(tabs): restore scrolling and pane transfers Sep 18, 2026
wzz6423 and others added 5 commits September 18, 2026 19:47
Keep the native header outside NSHostingView hit testing, use parent-relative scrollbar hit coordinates, and retain the grab area independently of hover painting. Add offscreen AppKit regression coverage for the event-routing and scrolling failures.

Co-authored-by: Codex <noreply@openai.com>
Restrict tracking areas to control bounds instead of unclipped visible rectangles. Let prompt-queue content yield its trailing constraint so its minimum width cannot expand narrow panes, including during repeated resize updates. Preserve existing selection drawing and live terminal surfaces.

Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
@wzz6423
wzz6423 merged commit 8c46b32 into main Sep 19, 2026
28 checks passed
@wzz6423
wzz6423 deleted the fix/tab-strip-scroll-buttons branch September 19, 2026 05:23
@wzz6423 wzz6423 moved this from Bug Fix to Done in zshell Development Sep 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-assisted An AI agent co-authored this change bug Something isn't working

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant