LibQuery: Add option to NOT process embedded IDs.

Request from depsgraph department, which does basically consider those
embedded IDs as any other data-block (unlike any BKE ID management code).
This commit is contained in:
2020-03-11 17:25:31 +01:00
parent 7dd0be9554
commit a54e17e52d
2 changed files with 6 additions and 1 deletions

View File

@@ -116,6 +116,8 @@ enum {
IDWALK_READONLY = (1 << 0),
IDWALK_RECURSE = (1 << 1), /* Also implies IDWALK_READONLY. */
IDWALK_INCLUDE_UI = (1 << 2), /* Include UI pointers (from WM and screens editors). */
/** Do not process ID pointers inside embedded IDs. Needed by depsgraph processing e.g. */
IDWALK_IGNORE_EMBEDDED_ID = (1 << 3),
IDWALK_NO_INDIRECT_PROXY_DATA_USAGE = (1 << 8), /* Ugly special case :(((( */
};

View File

@@ -534,7 +534,10 @@ static void library_foreach_ID_as_subdata_link(ID **id_pp,
FOREACH_CALLBACK_INVOKE_ID_PP(data, id_pp, IDWALK_CB_EMBEDDED);
BLI_assert(id == *id_pp);
if (flag & IDWALK_RECURSE) {
if (flag & IDWALK_IGNORE_EMBEDDED_ID) {
/* Do Nothing. */
}
else if (flag & IDWALK_RECURSE) {
/* Defer handling into main loop, recursively calling BKE_library_foreach_ID_link in
* IDWALK_RECURSE case is troublesome, see T49553. */
/* XXX note that this breaks the 'owner id' thing now, we likely want to handle that