[v2] fix: Files DragAndDrop bugs with OnDomReady and DisableWebViewDrop - #4743
[v2] fix: Files DragAndDrop bugs with OnDomReady and DisableWebViewDrop#4743leaanthony wants to merge 2 commits into
Conversation
This commit fixes the issues reported in #3563: 1. OnDomReady triggering multiple times during drag-and-drop: - Root cause: When files are dropped without proper event handling, the browser navigates to the dropped file, triggering navigation completion callbacks and thus OnDomReady again. - Fix: Register drag/drop event handlers early in the runtime JavaScript (main.js) before the user has a chance to drop files. These handlers call e.preventDefault() for file drops, preventing browser navigation. - Added setup() function in draganddrop.js that's called from main.js. - Additionally added OnDomReady single-fire guards on all platforms as a safety measure. 2. DisableWebViewDrop + EnableFileDrop conflict on Windows: - When both options were enabled, AllowExternalDrag(false) was called, which blocked ALL drag events including the ones needed for file drops. - Now only calls AllowExternalDrag(false) when DisableWebViewDrop is true AND EnableFileDrop is false. Platform-specific changes: - Windows: Fixed navigationCompleted to only call OnDomReady once - Linux: Added domReadySent flag to prevent multiple DomReady messages - macOS: Added domReadySent property to track if DomReady was sent Fixes #3563
The previous fix was over-engineered. It suppressed OnDomReady events on all platforms to prevent multiple calls during file drops. However, users may have legitimate use cases for OnDomReady being called on navigation/reload. This simplified fix: - Keeps the JavaScript setup() that runs on each DOM load to register drag handlers early (preventing browser navigation on file drops) - Keeps the Windows AllowExternalDrag fix for EnableFileDrop+DisableWebViewDrop - Removes the OnDomReady suppression on macOS, Linux, and Windows The core insight is that by preventing browser navigation on file drops via JavaScript, the page won't reload, so OnDomReady won't fire extra times in the problematic scenario anyway. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the ✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Deploying wails with
|
| Latest commit: |
ae04fea
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://2d7db912.wails.pages.dev |
| Branch Preview URL: | https://claude-investigate-fix-issue.wails.pages.dev |
|
Thanks for the drag-and-drop implementation. Some of this overlaps with newer platform-specific work, and the test plan is not yet complete, so I’m closing this draft to avoid duplicate paths. Any remaining gaps can be addressed in a focused follow-up PR. |



Summary
Fixes #3563
This PR addresses two critical issues with file drag-and-drop functionality:
OnDomReady triggering on every drag-and-drop: When
EnableFileDrop: true, dropping files would triggerOnDomReadymultiple times because the browser's default behavior (navigating to the dropped file) wasn't prevented early enough.EnableFileDrop + DisableWebViewDrop conflict: When both options were enabled together on Windows, file dropping stopped working entirely.
Root Cause
e.preventDefault()were only registered when the user calledruntime.OnFileDrop()OnFileDrop()is called (typically in the OnDomReady handler)file:///path/to/file.txt)The Fix
1. Early handler registration (JavaScript)
setup()function indraganddrop.jsthat registers drag/drop handlers immediatelymain.jsduring runtime initialization (beforeruntime:ready)2. Windows AllowExternalDrag fix
AllowExternalDragwhenDisableWebViewDrop: trueANDEnableFileDrop: falseTest plan
EnableFileDrop: true- verify OnDomReady only fires onceEnableFileDrop: trueandDisableWebViewDrop: trueon Windows🤖 Generated with Claude Code