LibOverride: Add own flag to copy or not overrides to ID copy code.
Relying on only no-main for that was weak, and inn the end it turns out we sometimes also need to ifnore override data during copy of Main data-blocks. NOTE: The new `LIB_ID_COPY_NO_LIB_OVERRIDE` is also added to the `LIB_ID_COPY_LOCALIZE` set of flags. NOTE: The fact that we may now copy liboverrides in some non-main cases may cause issues in some cases, pretty impossible to track all possible ones from reading the code... Would not expect too many problem though, usages of `LIB_ID_CREATE_NO_MAIN` by itself are not so common.
This commit is contained in:
parent
f337310b43
commit
c9e054c5de
|
@ -116,6 +116,8 @@ enum {
|
|||
LIB_ID_COPY_NO_ANIMDATA = 1 << 19,
|
||||
/** Mesh: Reference CD data layers instead of doing real copy - USE WITH CAUTION! */
|
||||
LIB_ID_COPY_CD_REFERENCE = 1 << 20,
|
||||
/** Do not copy id->override_library, used by ID datablock override routines. */
|
||||
LIB_ID_COPY_NO_LIB_OVERRIDE = 1 << 21,
|
||||
|
||||
/* *** XXX Hackish/not-so-nice specific behaviors needed for some corner cases. *** */
|
||||
/* *** Ideally we should not have those, but we need them for now... *** */
|
||||
|
@ -136,7 +138,8 @@ enum {
|
|||
LIB_ID_CREATE_LOCALIZE = LIB_ID_CREATE_NO_MAIN | LIB_ID_CREATE_NO_USER_REFCOUNT |
|
||||
LIB_ID_CREATE_NO_DEG_TAG,
|
||||
/** Generate a local copy, outside of bmain, to work on (used by COW e.g.). */
|
||||
LIB_ID_COPY_LOCALIZE = LIB_ID_CREATE_LOCALIZE | LIB_ID_COPY_NO_PREVIEW | LIB_ID_COPY_CACHES,
|
||||
LIB_ID_COPY_LOCALIZE = LIB_ID_CREATE_LOCALIZE | LIB_ID_COPY_NO_PREVIEW | LIB_ID_COPY_CACHES |
|
||||
LIB_ID_COPY_NO_LIB_OVERRIDE,
|
||||
};
|
||||
|
||||
void BKE_libblock_copy_ex(struct Main *bmain,
|
||||
|
|
|
@ -1264,9 +1264,7 @@ void BKE_libblock_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int ori
|
|||
new_id->properties = IDP_CopyProperty_ex(id->properties, copy_data_flag);
|
||||
}
|
||||
|
||||
/* We may need our own flag to control that at some point, but for now 'no main' one should be
|
||||
* good enough. */
|
||||
if ((orig_flag & LIB_ID_CREATE_NO_MAIN) == 0) {
|
||||
if ((orig_flag & LIB_ID_COPY_NO_LIB_OVERRIDE) == 0) {
|
||||
if (ID_IS_OVERRIDE_LIBRARY_REAL(id)) {
|
||||
/* We do not want to copy existing override rules here, as they would break the proper
|
||||
* remapping between IDs. Proper overrides rules will be re-generated anyway. */
|
||||
|
|
Loading…
Reference in New Issue