[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