[Bf-blender-cvs] [67869432f2e] master: Asset system: Remap local asset ID pointers as part of UI remapping
Julian Eisel
noreply at git.blender.org
Thu Nov 17 12:20:16 CET 2022
Commit: 67869432f2ea659e2c7ca4f244ecec6eb750fe27
Author: Julian Eisel
Date: Tue Nov 15 18:26:46 2022 +0100
Branches: master
https://developer.blender.org/rB67869432f2ea659e2c7ca4f244ecec6eb750fe27
Asset system: Remap local asset ID pointers as part of UI remapping
After checking with @mont29, this is much prefered over calling this in
BKE directly.
===================================================================
M source/blender/asset_system/AS_asset_library.h
M source/blender/asset_system/AS_asset_library.hh
M source/blender/asset_system/intern/asset_library.cc
M source/blender/blenkernel/intern/lib_id_delete.c
M source/blender/windowmanager/intern/wm_event_system.cc
===================================================================
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<AssetRepresentation *> 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 <cstdlib>
#include <cstring>
+#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)
More information about the Bf-blender-cvs
mailing list