private static void processDragAndDrop(ISupportDragAndDrop dragAndDropSupport, ref Rect r, SerializedProperty property) { Event curEvent = Event.current; Rect dropArea = dragAndDropSupport.GetDropArea(r, property); switch (curEvent.type) { case EventType.Repaint: case EventType.DragUpdated: case EventType.DragPerform: if (!dropArea.Contains(curEvent.mousePosition, allowInverse: true)) { break; } bool isValidDrop = dragAndDropSupport.IsDropValid( DragAndDrop.objectReferences, property); if (isValidDrop) { DragAndDrop.visualMode = DragAndDropVisualMode.Link; } else { DragAndDrop.visualMode = DragAndDropVisualMode.Rejected; } if (curEvent.type == EventType.DragPerform && isValidDrop) { DragAndDrop.AcceptDrag(); dragAndDropSupport.ProcessDroppedObjects( DragAndDrop.objectReferences, property); } break; } }