Library: Add flag top keep ID library pointer around
This only applies to ID being copied outside of bmain. Handy for cases when it is important to check if the copy corresponds to a data block coming from library. Example of that is proxy evaluation with copy on write. Thanks Bastien for review!
This commit is contained in:
parent
3ae6a8512d
commit
13e9291650
|
@ -77,6 +77,7 @@ enum {
|
|||
LIB_ID_COPY_CACHES = 1 << 18, /* Copy runtime data caches. */
|
||||
/* XXX TODO Do we want to keep that? would rather try to get rid of it... */
|
||||
LIB_ID_COPY_ACTIONS = 1 << 19, /* EXCEPTION! Deep-copy actions used by animdata of copied ID. */
|
||||
LIB_ID_COPY_KEEP_LIB = 1 << 20, /* Keep the library pointer when copying datablock outside of bmain. */
|
||||
};
|
||||
|
||||
void BKE_libblock_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, const int flag);
|
||||
|
|
|
@ -661,8 +661,12 @@ bool BKE_id_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int flag, con
|
|||
/* Do not make new copy local in case we are copying outside of main...
|
||||
* XXX TODO: is this behavior OK, or should we need own flag to control that? */
|
||||
if ((flag & LIB_ID_CREATE_NO_MAIN) == 0) {
|
||||
BLI_assert((flag & LIB_ID_COPY_KEEP_LIB) == 0);
|
||||
BKE_id_copy_ensure_local(bmain, id, *r_newid);
|
||||
}
|
||||
else {
|
||||
(*r_newid)->lib = id->lib;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue