The commonalities between drag-and-drop implementations across platforms are, roughly, the following:
- Multiple file paths may be dragged at once
- Events are received periodically by the target application while a drag operation is hovering over it
- The mouse position is provided along with the drag events during hover and on drop
- The drag data can be inspected during the drag operation, not just once the drop is executed
- The source provides a set of many potential data types that the item(s) being dragged can be interpreted as
- The target handles choosing which type(s) it cares about, and can request the same drag data in multiple different types