fix: show plus-sign cursor when dragging tab/pane outside window (v0.32.83)#224
Open
AgentA-asaf wants to merge 5 commits intomainfrom
Open
fix: show plus-sign cursor when dragging tab/pane outside window (v0.32.83)#224AgentA-asaf wants to merge 5 commits intomainfrom
AgentA-asaf wants to merge 5 commits intomainfrom
Conversation
There was a problem hiding this comment.
ReAgent Diagnostics
| Field | Value |
|---|---|
| ReAgent Version | 5.12.4 |
| Project Context | CLAUDE.md loaded |
| Model | claude-opus-4-6 |
| Effort | high |
| Ref Repos | Disabled |
| Merge Analysis | Clean |
| Review Time | 36.6s |
| Timestamp | 2026-03-25T01:52:37Z |
| Repository | agentmuxai/agentmux |
| PR | #224 |
Issues:
- package-lock.json:3 - Version is 0.32.82 but package.json is 0.32.83 (package-lock.json was bumped from 0.32.81→0.32.82 instead of 0.32.82→0.32.83, leaving it one behind)
Set effectAllowed = "copy" via a native dragstart listener on the draggable element (tab wrapper and pane header). Atlaskit PDND does not expose dataTransfer, so this bubble-phase listener fires after Atlaskit's capture-phase handler — effectAllowed is still writable at that point. Without this, Windows OLE defaults to the forbidden cursor (circle-slash) when the cursor leaves WebView2 and there is no drop target. Constraining to "copy" makes OLE show the arrow+plus cursor, communicating tearoff intent. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
c2995d0 to
23e82e1
Compare
There was a problem hiding this comment.
ReAgent Diagnostics
| Field | Value |
|---|---|
| ReAgent Version | 5.12.4 |
| Project Context | CLAUDE.md loaded |
| Model | claude-opus-4-6 |
| Effort | high |
| Ref Repos | Disabled |
| Merge Analysis | Clean |
| Review Time | 75.7s |
| Timestamp | 2026-03-25T01:55:16Z |
| Repository | agentmuxai/agentmux |
| PR | #224 |
Issues:
- package-lock.json:3 - Version is 0.32.83 but package.json is 0.32.84 (package-lock.json not updated by version bump)
- VERSION_HISTORY.md:5 - Still shows "Latest Version: 0.32.83" but should be 0.32.84 (not updated by version bump)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
ReAgent Diagnostics
| Field | Value |
|---|---|
| ReAgent Version | 5.12.4 |
| Project Context | CLAUDE.md loaded |
| Model | claude-opus-4-6 |
| Effort | high |
| Ref Repos | Disabled |
| Merge Analysis | 44 regression(s) detected |
| Review Time | 82.3s |
| Timestamp | 2026-03-25T01:59:21Z |
| Repository | agentmuxai/agentmux |
| PR | #224 |
LGTM
The Win32 commands already existed but were never called. Call setDragCursor() on drag start so SetSystemCursor replaces OCR_NO with IDC_CROSS for the drag's lifetime — showing a plus instead of circle-slash when dragging over the Windows desktop (Explorer returns DROPEFFECT_NONE, effectAllowed alone can't override OLE's cursor choice). Call restoreDragCursor() on drop, dragend, and the OLE fallback path. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
ReAgent Diagnostics
| Field | Value |
|---|---|
| ReAgent Version | 5.12.4 |
| Project Context | CLAUDE.md loaded |
| Model | claude-opus-4-6 |
| Effort | high |
| Ref Repos | Disabled |
| Merge Analysis | 44 regression(s) detected |
| Review Time | 67.3s |
| Timestamp | 2026-03-25T02:40:05Z |
| Repository | agentmuxai/agentmux |
| PR | #224 |
LGTM
…ursor SetSystemCursor fails on Windows desktop because OLE's IDropSource caches its LoadCursor(NULL, IDC_NO) handle on first GiveFeedback call, and Explorer also uses its own cursor resources for WM_SETCURSOR — so there is no static replacement that works reliably. Instead, spawn a 2ms polling thread (500Hz) that calls SetCursor(IDC_CROSS) while DRAG_CURSOR_ACTIVE is set. This wins every race when the mouse is stationary and dominates during typical 125–250Hz mouse movement. Stop the thread by setting DRAG_CURSOR_ACTIVE=false in restore_drag_cursor. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
ReAgent Diagnostics
| Field | Value |
|---|---|
| ReAgent Version | 5.12.4 |
| Project Context | CLAUDE.md loaded |
| Model | claude-opus-4-6 |
| Effort | high |
| Ref Repos | Disabled |
| Merge Analysis | 44 regression(s) detected |
| Review Time | 72.9s |
| Timestamp | 2026-03-25T10:42:30Z |
| Repository | agentmuxai/agentmux |
| PR | #224 |
LGTM
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
Root Cause
dataTransfer.effectAllowedwas never set duringdragstart. Atlaskit PDND does not exposedataTransferdirectly, so Windows OLE defaulted to the forbidden cursor over non-WebView2 areas (where no drop target setsdropEffect). SettingeffectAllowed = "copy"constrains the drag to copy-semantics and OLE renders the plus cursor.Why a native listener works: Atlaskit registers its
dragstarthandler ondocumentin capture phase. A bubble-phase listener on the draggable element fires after Atlaskit has committed the drag —effectAllowedis still writable untildragstartreturns.Changes
frontend/app/tab/droppable-tab.tsx— nativedragstartlistener ontabWrapRefsetseffectAllowed = "copy"frontend/layout/lib/TileLayout.win32.tsx— same fix on the pane header element insideregister()Test Plan
🤖 Generated with Claude Code