Browse Source

Fixed a bug where multiple itemDropped() callbacks were being triggered when using drag and drop

tags/2021-05-28
ed 8 years ago
parent
commit
112f1af3e8
2 changed files with 21 additions and 0 deletions
  1. +20
    -0
      modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp
  2. +1
    -0
      modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h

+ 20
- 0
modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp View File

@@ -393,6 +393,15 @@ void DragAndDropContainer::startDragging (const var& sourceDescription,
const Point<int>* imageOffsetFromMouse, const Point<int>* imageOffsetFromMouse,
const MouseInputSource* inputSourceCausingDrag) 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* draggingSource = getMouseInputSourceForDrag (sourceComponent, inputSourceCausingDrag);
auto lastMouseDown = draggingSource->getLastMouseDownPosition().roundToInt(); auto lastMouseDown = draggingSource->getLastMouseDownPosition().roundToInt();
Point<int> imageOffset; Point<int> imageOffset;
@@ -571,6 +580,17 @@ const MouseInputSource* DragAndDropContainer::getMouseInputSourceForDrag (Compon
return inputSourceCausingDrag; 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<int> pos) noexcept DragAndDropTarget::SourceDetails::SourceDetails (const var& desc, Component* comp, Point<int> pos) noexcept
: description (desc), : description (desc),


+ 1
- 0
modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h View File

@@ -233,6 +233,7 @@ private:
OwnedArray<DragImageComponent> dragImageComponents; OwnedArray<DragImageComponent> dragImageComponents;
const MouseInputSource* getMouseInputSourceForDrag (Component* sourceComponent, const MouseInputSource* inputSourceCausingDrag); const MouseInputSource* getMouseInputSourceForDrag (Component* sourceComponent, const MouseInputSource* inputSourceCausingDrag);
bool isAlreadyDragging (Component* sourceComponent) const noexcept;
#if JUCE_CATCH_DEPRECATED_CODE_MISUSE #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 // This is just here to cause a compile error in old code that hasn't been changed to use the new


Loading…
Cancel
Save