Skip to content

fix(web): make the empty workspace draggable on desktop - #13713

Merged
Yash-Singh1 merged 1 commit into
pingdotgg:mainfrom
otavio:fix/empty-workspace-drag-region
Sep 26, 2026
Merged

Yash-Singh1 merged 1 commit into
pingdotgg:mainfrom
otavio:fix/empty-workspace-drag-region

Conversation

@otavio

@otavio otavio commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #13711.

Problem

On desktop, the "What should we work on?" screen (no projects yet) can't be used to move the window. On Windows and Linux the window uses a hidden title bar, so it can only be dragged where CSS sets -webkit-app-region: drag. Every workspace page gets that area from WorkspacePageHeader, but NoProjectsHero never rendered one. The only drag area left was the sidebar title row. Its wordmark is a link and can't be dragged, so only a few pixels of padding worked. With the sidebar collapsed, nothing could move the window.

The "Couldn't start a new thread" state in _chat.index.tsx had the same gap.

Fix

Both screens now render the shared WorkspacePageHeader in Electron, like the no-active-thread and hosted "connect a computer" empty states already do. That gives them the standard titlebar-height drag strip, with the usual collapsed-sidebar and native-controls insets. The header is empty and renders only in Electron, so the web layout is unchanged.

This replaces #6030, which targets the old inline hero and adds a separate spacer component instead of the shared header.

Verification

  • vp lint on the changed files. The only warning is a pre-existing one in _chat.index.tsx code this PR doesn't touch.
  • apps/web typecheck passes.
  • I couldn't record a before/after video. The dev Electron build wouldn't start on my NixOS machine because it couldn't load libglib-2.0.so.0. To check it by hand: open the desktop app with no projects, collapse the sidebar, and drag from the top strip of the main pane.

Surfaces: desktop only. Web keeps its current layout (no window to drag), and mobile doesn't use these components. Providers, contracts, and docs are unaffected.


Made with Claude Opus 5.5 in Claude Code (running in T3 Code).

Summary by CodeRabbit

  • UI Improvements
    • Added the Electron title bar header to the empty-project screen and draft-start error page.

The no-projects hero and the failed-draft state never rendered a
WorkspacePageHeader, so on Windows and Linux (hidden title bar) the main
pane had no drag region. With the sidebar collapsed, the window could
not be moved at all.

Render the shared header in Electron on both screens, like every other
workspace page.

Fixes pingdotgg#13711
@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 25, 2026
@macroscopeapp

macroscopeapp Bot commented Sep 25, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 694e64b

Macroscope's review found this PR approvable — This is a narrowly scoped, desktop-only fix that reuses the existing workspace header to restore window dragging in two empty states. It leaves browser behavior unchanged and introduces no schema, deployment, security, billing, or static-analysis changes.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Sep 25, 2026

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: pingdotgg/t3code/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 035c60b0-a571-49f6-8e43-d506a903c97c

📥 Commits

Reviewing files that changed from the base of the PR and between ed809f7 and 694e64b.

📒 Files selected for processing (2)
  • apps/web/src/components/NoProjectsHero.tsx
  • apps/web/src/routes/_chat.index.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review.


📝 Walkthrough

Walkthrough

The no-project hero and draft-start error state now conditionally show the workspace header in Electron. Other runtimes do not show the added header.

Changes

Electron workspace headers

Layer / File(s) Summary
Add headers to empty and error states
apps/web/src/components/NoProjectsHero.tsx, apps/web/src/routes/_chat.index.tsx
The no-project hero and draft-start error state render WorkspacePageHeader when running in Electron. Other runtimes omit the added header.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~5 minutes

Change: Bug fix · Severity of issue fixed: Low

Suggested reviewers: juliusmarminge

Merge Risk: ⚪ Minimal · up to 694e6

The empty-workspace and failed-draft screens gain the intended Electron drag area, with other runtimes unchanged. No actionable merge risk is identified beyond normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 2 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: enabling desktop dragging for the empty workspace.
Description check ✅ Passed The description explains the problem, fix, affected surfaces, verification results, and verification limitation. It uses equivalent sections for the template’s required content, although it omits the …
Linked Issues check ✅ Passed Issue #13711 requires window dragging from the empty-workspace area. The PR renders WorkspacePageHeader electron in NoProjectsHero for Electron. WorkspacePageHeader applies the drag-region cla…
Out of Scope Changes check ✅ Passed The two changes add the Electron drag region to empty-workspace screens. They directly support issue #13711 and do not change project actions, draft behavior, or the non-Electron layout.
  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

Comment @coderabbitai help to get the list of available commands.

@Yash-Singh1
Yash-Singh1 merged commit eeea71a into pingdotgg:main Sep 26, 2026
23 of 24 checks passed
@otavio
otavio deleted the fix/empty-workspace-drag-region branch September 26, 2026 04:28
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 26, 2026
## What's Changed
* feat(observability): write a server heap snapshot on SIGUSR2 by @t3dotgg in pingdotgg/t3code#13694
* perf(server): shutdown no longer rewrites every stopped session row by @t3dotgg in pingdotgg/t3code#13688
* perf(server): build the thread list snapshot without decoding it twice by @t3dotgg in pingdotgg/t3code#13693
* fix(client): slow servers finish loading the thread list instead of loading it twice by @t3dotgg in pingdotgg/t3code#13683
* perf(web): hidden terminal drawers no longer keep full thread history in memory by @t3dotgg in pingdotgg/t3code#13686
* perf(server): per-thread settlement and PR checks no longer rebuild the whole thread list by @t3dotgg in pingdotgg/t3code#13691
* fix(mobile): running threads open at the latest message by @AKolenda in pingdotgg/t3code#13530
* feat(observability): record event loop stalls in the server trace by @t3dotgg in pingdotgg/t3code#13697
* perf(server): stop re-running git for every project each minute by @t3dotgg in pingdotgg/t3code#13689
* fix(usage): hide the Cursor keychain prompt when Cursor isn't set up by @Gigioxx in pingdotgg/t3code#13714
* feat(web): add chat width setting for wide screens by @otavio in pingdotgg/t3code#11594
* fix(opencode): accept v2 serve ready line when spawning server by @shirishpothi in pingdotgg/t3code#13651
* fix(editors): stop treating the agy CLI as the Antigravity IDE by @ishaanko in pingdotgg/t3code#7079
* fix(web): make the empty workspace draggable on desktop by @otavio in pingdotgg/t3code#13713
* fix(server): installed editors no longer vanish when discovery is slow by @bfowler in pingdotgg/t3code#13669
* fix(git): exclude SSH ports from provider URLs by @GaMeRaM in pingdotgg/t3code#12537
* fix(web): Mod+B bolds on non-Latin layouts by @ValeraZSD in pingdotgg/t3code#13409
* fix(server): prune expired replay-protection files from the secrets directory by @t3dotgg in pingdotgg/t3code#13695
* fix(web): terminal links drop a trailing colon by @ValeraZSD in pingdotgg/t3code#13408
* fix(server): bump node-pty to 1.2.0-beta.15 for linux-arm64 prebuild by @Ephraim-9 in pingdotgg/t3code#13748
* Show a focus ring on sidebar thread and draft rows by @ryanilano in pingdotgg/t3code#13344
* fix(mobile): keep composer within folded screen after resume by @PixPMusic in pingdotgg/t3code#13310
* fix(server): let OpenCode generate session titles by @macodev00 in pingdotgg/t3code#13368
* fix(server): let Antigravity inspect unsupported files by path by @Bil0000 in pingdotgg/t3code#13339
* fix(mobile): link URLs with ports and single-label hosts by @Yash-Singh1 in pingdotgg/t3code#13795
* feat(web): add keyboard navigation for usage by @tris203 in pingdotgg/t3code#10158
* perf(observability): stop writing empty spans on spawns, projected events, and idle polls by @t3dotgg in pingdotgg/t3code#13756
* perf(server): opening Diagnostics no longer loads the whole trace ring into memory by @t3dotgg in pingdotgg/t3code#13763
* perf(clients): sort projects and settled threads without re-parsing dates per comparison by @t3dotgg in pingdotgg/t3code#13759
* fix(observability): the renderer trace proxy stops tracing itself by @t3dotgg in pingdotgg/t3code#13761
* perf(server): background sweeps only read threads that can still settle by @t3dotgg in pingdotgg/t3code#13765
* perf(clients): saving the thread list cache no longer freezes the UI by @t3dotgg in pingdotgg/t3code#13767
* perf(server): cut idle wakeups from the Connect relay and session reaper by @t3dotgg in pingdotgg/t3code#13774
* fix(mobile): keep trailing underscores and tildes in autolinked URLs by @Yash-Singh1 in pingdotgg/t3code#13807
* fix(web): queued messages send while their thread is not open by @t3dotgg in pingdotgg/t3code#13764
* fix(server): background git status fetches no longer fill the disk with failed repacks by @t3dotgg in pingdotgg/t3code#13812
* fix(mobile): thread list shows the pull request icon instead of # by @flamboh in pingdotgg/t3code#13742
* fix(accessibility): correct control announcements and sidebar traversal by @blinding-pixels in pingdotgg/t3code#13491
* fix(usage): tolerate newer provider variants by @tris203 in pingdotgg/t3code#10076
* fix(usage): omit Cursor warning when no login is saved by @tris203 in pingdotgg/t3code#13820
* fix(usage): identify client version mismatches by @tris203 in pingdotgg/t3code#8208
* fix(web): stop mistaking offline servers for updates by @tris203 in pingdotgg/t3code#13083
* test(usage): assert contract mismatch details by @Yash-Singh1 in pingdotgg/t3code#13861
* fix(build): validate Linux node-pty prebuilds in Windows artifacts by @Yash-Singh1 in pingdotgg/t3code#13867

## New Contributors
* @otavio made their first contribution in pingdotgg/t3code#11594
* @shirishpothi made their first contribution in pingdotgg/t3code#13651
* @bfowler made their first contribution in pingdotgg/t3code#13669
* @GaMeRaM made their first contribution in pingdotgg/t3code#12537
* @ValeraZSD made their first contribution in pingdotgg/t3code#13409
* @Ephraim-9 made their first contribution in pingdotgg/t3code#13748
* @ryanilano made their first contribution in pingdotgg/t3code#13344
* @macodev00 made their first contribution in pingdotgg/t3code#13368
* @blinding-pixels made their first contribution in pingdotgg/t3code#13491

**Full Changelog**: pingdotgg/t3code@v0.0.43-nightly.20260926.2282...v0.0.43-nightly.20260926.2318

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.43-nightly.20260926.2318
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS 0-9 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Cant drag top bar of window (at least on 'what should we work on page')

2 participants