Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <bastien@blender.org>2022-02-25 13:37:55 +0300
committerBastien Montagne <bastien@blender.org>2022-02-25 13:37:55 +0300
commit66328db703bba8196f159d15d9632c34d845892d (patch)
treec3f1b1e876a8553adf2183b1581333ffc4b910ef /source/blender/windowmanager
parent5186a28dec79a3722a516314cede5fcdd1c07376 (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.c8
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);
}
}