From 86c363a02706b1a5d3cb18d17b4b37bd78461ded Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 7 Aug 2018 10:57:09 +0200 Subject: WM: pass on wmDrag to drop operators, so they can get the data directly. Currently drop operators work mostly by specifying the name of the datablock. However there can be datablocks with the same name in different libraries, so this gives wrong results in some cases. Currently only outliner drop operators have been updated to use this mechanism. --- source/blender/windowmanager/intern/wm_dragdrop.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'source/blender/windowmanager/intern/wm_dragdrop.c') diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c index 0ae51cc922b..6b9a7fb5430 100644 --- a/source/blender/windowmanager/intern/wm_dragdrop.c +++ b/source/blender/windowmanager/intern/wm_dragdrop.c @@ -189,6 +189,27 @@ void WM_drag_free_list(struct ListBase *lb) } } + +ID *WM_drag_ID(const wmDrag *drag, short idcode) +{ + if (drag->type != WM_DRAG_ID) { + return NULL; + } + + ID *id = drag->poin; + return (idcode == 0 || GS(id->name) == idcode) ? id : NULL; +} + +ID *WM_drag_ID_from_event(const wmEvent *event, short idcode) +{ + if (event->custom != EVT_DATA_DRAGDROP) { + return NULL; + } + + ListBase *lb = event->customdata; + return WM_drag_ID(lb->first, idcode); +} + static const char *dropbox_active(bContext *C, ListBase *handlers, wmDrag *drag, const wmEvent *event) { wmEventHandler *handler = handlers->first; -- cgit v1.2.3