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:
parent
dd260d2f03
commit
67869432f2
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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_{};
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue