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.
This commit is contained in:
Julian Eisel 2022-11-15 18:26:46 +01:00
parent dd260d2f03
commit 67869432f2
5 changed files with 11 additions and 12 deletions

View File

@ -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
}

View File

@ -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_{};

View File

@ -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;

View File

@ -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) {

View File

@ -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)