Skip to content

Fix active-pane border rendered too far below the pane's top - #4

Merged
MarvinZeising merged 1 commit into
marvinfrom
fix/pane-border-offset
Aug 3, 2026
Merged

MarvinZeising merged 1 commit into
marvinfrom
fix/pane-border-offset

Conversation

@MarvinZeising

Copy link
Copy Markdown
Owner

Re-lands 40bcdc1e8a, which was committed straight onto marvin-main on Aug 1 but lost the same night: build-and-install.sh used to run git checkout -B marvin-main origin/marvin-main on every rebuild, force-resetting the local branch to origin and silently discarding this never-pushed commit. It only survived on an orphaned local scratch branch. Opening as a real PR this time so it can't be lost again.

Single-tab panes hide their tab strip, so their real content starts higher than the chrome-trimmed layout estimate assumed -- which made the active-pane border (and unread/flash rings) render ~2 rows below the pane's true top edge.

preferredTmuxWorkspacePaneWindowOverlayRect() validated the live ("exact")
pane rect against the chrome-trimmed layout estimate, which assumes every
pane's tab-strip chrome is topChromeHeight (28pt, ~2 terminal rows) tall.
Single-tab panes hide that tab strip, so their real content starts right at
the pane's top -- higher than the trimmed estimate -- which made the check
reject the accurate exact rect and fall back to the over-trimmed one,
rendering the active-pane border (and unread/flash rings) ~2 rows below the
pane's true top edge.

Add TmuxPaneOverlayGeometry.rawWindowOverlayRect(), an untrimmed variant of
windowOverlayRect(), and validate the exact rect against it instead.
@MarvinZeising
MarvinZeising merged commit b443327 into marvin Aug 3, 2026
MarvinZeising added a commit that referenced this pull request Aug 4, 2026
MarvinZeising added a commit that referenced this pull request Aug 4, 2026
MarvinZeising added a commit that referenced this pull request Aug 4, 2026
preferredTmuxWorkspacePaneWindowOverlayRect() validated the live ("exact")
pane rect against the chrome-trimmed layout estimate, which assumes every
pane's tab-strip chrome is topChromeHeight (28pt, ~2 terminal rows) tall.
Single-tab panes hide that tab strip, so their real content starts right at
the pane's top -- higher than the trimmed estimate -- which made the check
reject the accurate exact rect and fall back to the over-trimmed one,
rendering the active-pane border (and unread/flash rings) ~2 rows below the
pane's true top edge.

Add TmuxPaneOverlayGeometry.rawWindowOverlayRect(), an untrimmed variant of
windowOverlayRect(), and validate the exact rect against it instead.
MarvinZeising added a commit that referenced this pull request Aug 5, 2026
preferredTmuxWorkspacePaneWindowOverlayRect() validated the live ("exact")
pane rect against the chrome-trimmed layout estimate, which assumes every
pane's tab-strip chrome is topChromeHeight (28pt, ~2 terminal rows) tall.
Single-tab panes hide that tab strip, so their real content starts right at
the pane's top -- higher than the trimmed estimate -- which made the check
reject the accurate exact rect and fall back to the over-trimmed one,
rendering the active-pane border (and unread/flash rings) ~2 rows below the
pane's true top edge.

Add TmuxPaneOverlayGeometry.rawWindowOverlayRect(), an untrimmed variant of
windowOverlayRect(), and validate the exact rect against it instead.
MarvinZeising added a commit that referenced this pull request Aug 5, 2026
tmuxWorkspacePaneExactRect's panel-type switch only handled
TerminalPanel and BrowserPanel; every other panel type (notably
AgentSessionPanel) fell to the default nil case, so the exact-rect
correction from #4 never applied and the active-pane border in a
split still used the chrome-trimmed estimate, reproducing the same
~2-row offset #4 fixed for terminals.

Expose hostedView on AgentSessionPanel (forwarding through
AgentSessionWebRendererSession to the bound WKWebView), matching the
existing hostedView/webView pattern on TerminalPanel/BrowserPanel, and
add it to the switch.
MarvinZeising added a commit that referenced this pull request Aug 6, 2026
preferredTmuxWorkspacePaneWindowOverlayRect() validated the live ("exact")
pane rect against the chrome-trimmed layout estimate, which assumes every
pane's tab-strip chrome is topChromeHeight (28pt, ~2 terminal rows) tall.
Single-tab panes hide that tab strip, so their real content starts right at
the pane's top -- higher than the trimmed estimate -- which made the check
reject the accurate exact rect and fall back to the over-trimmed one,
rendering the active-pane border (and unread/flash rings) ~2 rows below the
pane's true top edge.

Add TmuxPaneOverlayGeometry.rawWindowOverlayRect(), an untrimmed variant of
windowOverlayRect(), and validate the exact rect against it instead.
MarvinZeising added a commit that referenced this pull request Aug 6, 2026
tmuxWorkspacePaneExactRect's panel-type switch only handled
TerminalPanel and BrowserPanel; every other panel type (notably
AgentSessionPanel) fell to the default nil case, so the exact-rect
correction from #4 never applied and the active-pane border in a
split still used the chrome-trimmed estimate, reproducing the same
~2-row offset #4 fixed for terminals.

Expose hostedView on AgentSessionPanel (forwarding through
AgentSessionWebRendererSession to the bound WKWebView), matching the
existing hostedView/webView pattern on TerminalPanel/BrowserPanel, and
add it to the switch.
MarvinZeising added a commit that referenced this pull request Aug 7, 2026
preferredTmuxWorkspacePaneWindowOverlayRect() validated the live ("exact")
pane rect against the chrome-trimmed layout estimate, which assumes every
pane's tab-strip chrome is topChromeHeight (28pt, ~2 terminal rows) tall.
Single-tab panes hide that tab strip, so their real content starts right at
the pane's top -- higher than the trimmed estimate -- which made the check
reject the accurate exact rect and fall back to the over-trimmed one,
rendering the active-pane border (and unread/flash rings) ~2 rows below the
pane's true top edge.

Add TmuxPaneOverlayGeometry.rawWindowOverlayRect(), an untrimmed variant of
windowOverlayRect(), and validate the exact rect against it instead.
MarvinZeising added a commit that referenced this pull request Aug 7, 2026
tmuxWorkspacePaneExactRect's panel-type switch only handled
TerminalPanel and BrowserPanel; every other panel type (notably
AgentSessionPanel) fell to the default nil case, so the exact-rect
correction from #4 never applied and the active-pane border in a
split still used the chrome-trimmed estimate, reproducing the same
~2-row offset #4 fixed for terminals.

Expose hostedView on AgentSessionPanel (forwarding through
AgentSessionWebRendererSession to the bound WKWebView), matching the
existing hostedView/webView pattern on TerminalPanel/BrowserPanel, and
add it to the switch.
MarvinZeising added a commit that referenced this pull request Aug 8, 2026
preferredTmuxWorkspacePaneWindowOverlayRect() validated the live ("exact")
pane rect against the chrome-trimmed layout estimate, which assumes every
pane's tab-strip chrome is topChromeHeight (28pt, ~2 terminal rows) tall.
Single-tab panes hide that tab strip, so their real content starts right at
the pane's top -- higher than the trimmed estimate -- which made the check
reject the accurate exact rect and fall back to the over-trimmed one,
rendering the active-pane border (and unread/flash rings) ~2 rows below the
pane's true top edge.

Add TmuxPaneOverlayGeometry.rawWindowOverlayRect(), an untrimmed variant of
windowOverlayRect(), and validate the exact rect against it instead.
MarvinZeising added a commit that referenced this pull request Aug 8, 2026
tmuxWorkspacePaneExactRect's panel-type switch only handled
TerminalPanel and BrowserPanel; every other panel type (notably
AgentSessionPanel) fell to the default nil case, so the exact-rect
correction from #4 never applied and the active-pane border in a
split still used the chrome-trimmed estimate, reproducing the same
~2-row offset #4 fixed for terminals.

Expose hostedView on AgentSessionPanel (forwarding through
AgentSessionWebRendererSession to the bound WKWebView), matching the
existing hostedView/webView pattern on TerminalPanel/BrowserPanel, and
add it to the switch.
MarvinZeising added a commit that referenced this pull request Aug 9, 2026
preferredTmuxWorkspacePaneWindowOverlayRect() validated the live ("exact")
pane rect against the chrome-trimmed layout estimate, which assumes every
pane's tab-strip chrome is topChromeHeight (28pt, ~2 terminal rows) tall.
Single-tab panes hide that tab strip, so their real content starts right at
the pane's top -- higher than the trimmed estimate -- which made the check
reject the accurate exact rect and fall back to the over-trimmed one,
rendering the active-pane border (and unread/flash rings) ~2 rows below the
pane's true top edge.

Add TmuxPaneOverlayGeometry.rawWindowOverlayRect(), an untrimmed variant of
windowOverlayRect(), and validate the exact rect against it instead.
MarvinZeising added a commit that referenced this pull request Aug 9, 2026
tmuxWorkspacePaneExactRect's panel-type switch only handled
TerminalPanel and BrowserPanel; every other panel type (notably
AgentSessionPanel) fell to the default nil case, so the exact-rect
correction from #4 never applied and the active-pane border in a
split still used the chrome-trimmed estimate, reproducing the same
~2-row offset #4 fixed for terminals.

Expose hostedView on AgentSessionPanel (forwarding through
AgentSessionWebRendererSession to the bound WKWebView), matching the
existing hostedView/webView pattern on TerminalPanel/BrowserPanel, and
add it to the switch.
MarvinZeising added a commit that referenced this pull request Aug 10, 2026
preferredTmuxWorkspacePaneWindowOverlayRect() validated the live ("exact")
pane rect against the chrome-trimmed layout estimate, which assumes every
pane's tab-strip chrome is topChromeHeight (28pt, ~2 terminal rows) tall.
Single-tab panes hide that tab strip, so their real content starts right at
the pane's top -- higher than the trimmed estimate -- which made the check
reject the accurate exact rect and fall back to the over-trimmed one,
rendering the active-pane border (and unread/flash rings) ~2 rows below the
pane's true top edge.

Add TmuxPaneOverlayGeometry.rawWindowOverlayRect(), an untrimmed variant of
windowOverlayRect(), and validate the exact rect against it instead.
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.

1 participant