Implementing Drag & Drop is hard!
*click*?.... No, there was movement!
What should happen if people, during drag, accidentally push another secondary (mouse) button? Should the drag & drop process "abort", "pause" or "finish"?
In the case of "pause":
How can someone resume the drag & drop process then?
What should happen, if the mouse is out of the workspace area or another object is between the dragged object and cursor?
So many states and workflows to consider...