diff options
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 7 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_dragdrop.c | 4 |
2 files changed, 10 insertions, 1 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 29a42dd4021..c098b5c79a1 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -1993,7 +1993,12 @@ static bool ui_but_drag_init(bContext *C, } else { wmDrag *drag = WM_event_start_drag( - C, but->icon, but->dragtype, but->dragpoin, ui_but_value_get(but), WM_DRAG_NOP); + C, + but->icon, + but->dragtype, + but->dragpoin, + ui_but_value_get(but), + (but->dragflag & UI_BUT_DRAGPOIN_FREE) ? WM_DRAG_FREE_DATA : WM_DRAG_NOP); /* wmDrag has ownership over dragpoin now, stop messing with it. */ but->dragpoin = NULL; diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c index fe2e2d92127..08f60fef0d2 100644 --- a/source/blender/windowmanager/intern/wm_dragdrop.c +++ b/source/blender/windowmanager/intern/wm_dragdrop.c @@ -150,6 +150,10 @@ wmDrag *WM_event_start_drag( switch (type) { case WM_DRAG_PATH: BLI_strncpy(drag->path, poin, FILE_MAX); + /* As the path is being copied, free it immediately as `drag` wont "own" the data. */ + if (flags & WM_DRAG_FREE_DATA) { + MEM_freeN(poin); + } break; case WM_DRAG_ID: if (poin) { |