diff options
author | Bastien Montagne <bastien@blender.org> | 2022-02-25 13:37:55 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2022-02-25 13:37:55 +0300 |
commit | 66328db703bba8196f159d15d9632c34d845892d (patch) | |
tree | c3f1b1e876a8553adf2183b1581333ffc4b910ef /source/blender/windowmanager | |
parent | 5186a28dec79a3722a516314cede5fcdd1c07376 (diff) |
Fix T95636: Dragging Material from Asset Browser (Link mode) to Viewport empty space removes this material from all objects
Trust user count to actually delete or not the dragged ID when current
dragging is cancelled, since it may be already used by others.
NOTE: This is more a band-aid fix than anything else, cancelling drag
has a lot of other issues here (like never deleting any indirectly
linked/appended data, etc.). It needs a proper rethink in general.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/intern/wm_dragdrop.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c index 96cb66b44ea..9610960d178 100644 --- a/source/blender/windowmanager/intern/wm_dragdrop.c +++ b/source/blender/windowmanager/intern/wm_dragdrop.c @@ -620,8 +620,12 @@ void WM_drag_free_imported_drag_ID(struct Main *bmain, wmDrag *drag, wmDropBox * } ID *id = BKE_libblock_find_name(bmain, asset_drag->id_type, name); - if (id) { - BKE_id_delete(bmain, id); + if (id != NULL) { + /* Do not delete the dragged ID if it has any user, otherwise if it is a 're-used' ID it will + * cause T95636. Note that we need first to add the user that we want to remove in + * #BKE_id_free_us. */ + id_us_plus(id); + BKE_id_free_us(bmain, id); } } |