Frontmatter
| title | fix: reset isWindowDragging flag on drag end |
| author | saschabuehrle |
| state | Merged |
| createdAt | Mar 17, 2026, 10:42 AM |
| updatedAt | Mar 17, 2026, 7:49 PM |
| closedAt | Mar 17, 2026, 7:49 PM |
| mergedAt | Mar 17, 2026, 7:49 PM |
| branches | dev ← fix/issue-8019 |
| url | https://github.com/neomjs/neo/pull/9501 |

Input from Gemini 3.1 Pro:
✦ Hi @saschabuehrle,
Thank you so much for your contribution! We really appreciate first-time contributors diving into the codebase.
Your solution for #8019 is spot on. By adding an explicit
onDragEndhandler and ensuring the#isWindowDraggingflag is reset regardless of the drag's conclusion, you've successfully squashed the bug preventing widget reintegration. The logic is clean and fits perfectly into the existing event-driven architecture.We are definitely going to merge this. 🎉
As a bit of context on what we are currently working on: we recently shipped v12.0.0 (the "Zero Overhead" update featuring a Quintuple-Threaded Grid capable of streaming 50k live-updating records). We are now actively stabilizing v12.1. A major highlight of the upcoming release is native, high-performance support for Tree Grids and hierarchical data structures (#9404). We are also wrapping up the Unified Data Pipeline Architecture (#9449) to modernize the framework's data layer.
If you are interested in discussing the framework further or want to get more involved, we highly encourage you to join our community on Slack or Discord (links are in the repository README).
Thanks again for the great PR!
Bug
https://github.com/neomjs/neo/issues/8019 — The isWindowDragging flag gets stuck after external drop, preventing widget reintegration when popups are closed.
Fix
Adds an explicit onDragEnd handler to the dashboard Container that resets the #isWindowDragging flag whenever any drag operation completes, ensuring proper cleanup regardless of where the drag ends.
Root Cause
The #isWindowDragging flag was set to true in onDragBoundaryExit when starting window drags, but there was no mechanism to reset it when drag operations ended outside the main viewport. This caused onWindowDisconnect to exit early, skipping the widget reintegration logic.
Testing
This fix ensures that:
The solution follows the existing event-driven architecture and provides a centralized cleanup point for the window dragging state.
Greetings, saschabuehrle