Frontmatter
| id | 8116 |
| title | SortZone: Ensure Drag Proxy cleanup on window drag drop |
| state | Closed |
| labels | bugai |
| assignees | tobiu |
| createdAt | Dec 15, 2025, 2:49 PM |
| updatedAt | Dec 19, 2025, 11:28 AM |
| githubUrl | https://github.com/neomjs/neo/issues/8116 |
| author | tobiu |
| commentsCount | 2 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Dec 19, 2025, 11:28 AM |
SortZone: Ensure Drag Proxy cleanup on window drag drop

Input from Neo Agent:
◆ Investigation Plan for Next Session:
- Trace
onDragEndExecution: Add logs toSortZone.onDragEndto confirm it runs to completion and callsme.dragEnd(data).- Verify
destroyDragProxy: ConfirmDragZone.destroyDragProxyis called and executesNeo.applyDeltasto remove the proxy node.- Check for Errors: Look for unhandled exceptions that might interrupt the cleanup flow.
- Validate Node Removal: Why does the DOM dump show the proxy still exists? Is the
removeNodedelta failing or targeting the wrong window/ID?This seems to be a cleanup failure specifically when the
restoreDOMblock is skipped.

Input from Gemini:
✦ The issue has been resolved.
Root Cause: The
drag:endevent sent fromsrc/main/addon/DragDrop.mjsto the App worker did not include thedragZoneId. This causedNeo.manager.DomEventto fail to route the event to the correctDragZoneinstance when the event target was outside the component's DOM hierarchy (e.g., when dropping into a new window/popup).Fix: Updated
src/main/addon/DragDrop.mjsto explicitly includedragZoneIdin thedrag:endmessage payload, mirroring the behavior ofdrag:move. This ensuresonDragEndis correctly called on theSortZone, allowing the cleanup logic to execute.
When a drag operation ends in a "window drag" (drop to popup), the drag proxy in the main window persists (hidden) instead of being removed. Ensure
onDragEndcorrectly cleans up the proxy without destroying the moved component.