diff --git a/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp b/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp index 1d8cc0e306..8e2dbf5559 100644 --- a/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp +++ b/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp @@ -393,6 +393,15 @@ void DragAndDropContainer::startDragging (const var& sourceDescription, const Point* imageOffsetFromMouse, const MouseInputSource* inputSourceCausingDrag) { + if (isAlreadyDragging (sourceComponent)) + return; + + if (inputSourceCausingDrag == nullptr || ! inputSourceCausingDrag->isDragging()) + { + jassertfalse; // You must call startDragging() from within a mouseDown or mouseDrag callback! + return; + } + auto* draggingSource = getMouseInputSourceForDrag (sourceComponent, inputSourceCausingDrag); auto lastMouseDown = draggingSource->getLastMouseDownPosition().roundToInt(); Point imageOffset; @@ -571,6 +580,17 @@ const MouseInputSource* DragAndDropContainer::getMouseInputSourceForDrag (Compon return inputSourceCausingDrag; } +bool DragAndDropContainer::isAlreadyDragging (Component* component) const noexcept +{ + for (auto* dragImageComp : dragImageComponents) + { + if (dragImageComp->sourceDetails.sourceComponent == component) + return true; + } + + return false; +} + //============================================================================== DragAndDropTarget::SourceDetails::SourceDetails (const var& desc, Component* comp, Point pos) noexcept : description (desc), diff --git a/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h b/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h index 9a32460455..eef04a382e 100644 --- a/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h +++ b/modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h @@ -233,6 +233,7 @@ private: OwnedArray dragImageComponents; const MouseInputSource* getMouseInputSourceForDrag (Component* sourceComponent, const MouseInputSource* inputSourceCausingDrag); + bool isAlreadyDragging (Component* sourceComponent) const noexcept; #if JUCE_CATCH_DEPRECATED_CODE_MISUSE // This is just here to cause a compile error in old code that hasn't been changed to use the new