Fix drag-handoff bugs: gate FX re-resolve on outside-panel, cache unresolvable OS-drag verdict, block double FX-add retry

This commit is contained in:
2026-07-30 00:09:00 -04:00
parent 0800760833
commit 875d5b4632
9 changed files with 110 additions and 75 deletions
+9
View File
@@ -26,4 +26,13 @@ namespace reasampler {
// (DROPEFFECT_COPY); the return is advisory — a failed drag surfaces no error.
bool initiateDragOut(HWND__* panelHwnd, const std::vector<std::string>& absolutePaths);
// Cheap, side-effect-free readiness probe: true iff initiateDragOut would actually be able to
// START a drag for `absolutePaths` right now. Call this BEFORE tearing down internal drag
// state (release capture, clear drag fields) — an OS that isn't ready (OLE unavailable, or the
// path list can't build a CF_HDROP) must not consume the gesture the same way an empty payload
// would. On Windows this re-runs the same OLE-init + HDROP-build checks initiateDragOut does,
// freeing the probe HGLOBAL immediately; SWELL exposes no such probe, so macOS/Linux reduces to
// the non-empty check alone.
bool canInitiateDragOut(const std::vector<std::string>& absolutePaths);
} // namespace reasampler