diff --git a/source/blender/asset_system/AS_asset_library.h b/source/blender/asset_system/AS_asset_library.h index 8c5c4633c4e..83ee8cebcdf 100644 --- a/source/blender/asset_system/AS_asset_library.h +++ b/source/blender/asset_system/AS_asset_library.h @@ -34,7 +34,7 @@ bool AS_asset_library_has_any_unsaved_catalogs(void); /** An asset library can include local IDs (IDs in the current file). Their pointers need to be * remapped on change (or assets removed as IDs gets removed). */ -void AS_asset_library_remap_ids(struct IDRemapper *mappings); +void AS_asset_library_remap_ids(const struct IDRemapper *mappings); #ifdef __cplusplus } diff --git a/source/blender/asset_system/AS_asset_library.hh b/source/blender/asset_system/AS_asset_library.hh index 8bc9927c198..c4d9706a9c1 100644 --- a/source/blender/asset_system/AS_asset_library.hh +++ b/source/blender/asset_system/AS_asset_library.hh @@ -73,7 +73,7 @@ struct AssetLibrary { void on_blend_save_post(Main *bmain, PointerRNA **pointers, int num_pointers); - void remap_ids(struct IDRemapper &mappings); + void remap_ids(const struct IDRemapper &mappings); private: bCallbackFuncStore on_save_callback_store_{}; diff --git a/source/blender/asset_system/intern/asset_library.cc b/source/blender/asset_system/intern/asset_library.cc index 74b39fa7b0f..a7add445c99 100644 --- a/source/blender/asset_system/intern/asset_library.cc +++ b/source/blender/asset_system/intern/asset_library.cc @@ -104,7 +104,7 @@ void AS_asset_library_refresh_catalog_simplename(struct ::AssetLibrary *asset_li lib->refresh_catalog_simplename(asset_data); } -void AS_asset_library_remap_ids(IDRemapper *mappings) +void AS_asset_library_remap_ids(const IDRemapper *mappings) { AssetLibraryService *service = AssetLibraryService::get(); service->foreach_loaded_asset_library( @@ -203,7 +203,7 @@ void AssetLibrary::on_blend_save_post(struct Main *main, } } -void AssetLibrary::remap_ids(IDRemapper &mappings) +void AssetLibrary::remap_ids(const IDRemapper &mappings) { Set removed_id_assets; diff --git a/source/blender/blenkernel/intern/lib_id_delete.c b/source/blender/blenkernel/intern/lib_id_delete.c index 45787a5e3a0..c7643c56212 100644 --- a/source/blender/blenkernel/intern/lib_id_delete.c +++ b/source/blender/blenkernel/intern/lib_id_delete.c @@ -19,8 +19,6 @@ #include "BLI_linklist.h" #include "BLI_listbase.h" -#include "AS_asset_library.h" - #include "BKE_anim_data.h" #include "BKE_asset.h" #include "BKE_idprop.h" @@ -139,16 +137,16 @@ void BKE_id_free_ex(Main *bmain, void *idv, int flag, const bool use_flag_from_i BKE_main_lock(bmain); } - struct IDRemapper *remapper = BKE_id_remapper_create(); - BKE_id_remapper_add(remapper, id, NULL); - if ((flag & LIB_ID_FREE_NO_UI_USER) == 0) { if (free_notifier_reference_cb) { free_notifier_reference_cb(id); } if (remap_editor_id_reference_cb) { + struct IDRemapper *remapper = BKE_id_remapper_create(); + BKE_id_remapper_add(remapper, id, NULL); remap_editor_id_reference_cb(remapper); + BKE_id_remapper_free(remapper); } } @@ -160,9 +158,6 @@ void BKE_id_free_ex(Main *bmain, void *idv, int flag, const bool use_flag_from_i } } - AS_asset_library_remap_ids(remapper); - BKE_id_remapper_free(remapper); - BKE_libblock_free_data(id, (flag & LIB_ID_FREE_NO_USER_REFCOUNT) == 0); if ((flag & LIB_ID_FREE_NO_MAIN) == 0) { diff --git a/source/blender/windowmanager/intern/wm_event_system.cc b/source/blender/windowmanager/intern/wm_event_system.cc index 48806754433..90f162ac76a 100644 --- a/source/blender/windowmanager/intern/wm_event_system.cc +++ b/source/blender/windowmanager/intern/wm_event_system.cc @@ -13,6 +13,8 @@ #include #include +#include "AS_asset_library.h" + #include "DNA_listBase.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" @@ -393,6 +395,8 @@ void WM_main_remap_editor_id_reference(const IDRemapper *mappings) if (wm && wm->message_bus) { BKE_id_remapper_iter(mappings, wm_main_remap_msgbus_notify, wm->message_bus); } + + AS_asset_library_remap_ids(mappings); } static void wm_notifier_clear(wmNotifier *note)