Revert "Refactor: Core, give the IDWALK_… enums an explicit name"
This reverts commit 3ef748789d. It was
landed too hastily, my apologies.
Pull Request: https://projects.blender.org/blender/blender/pulls/131813
This commit is contained in:
@@ -9,8 +9,6 @@
|
||||
|
||||
#include "DNA_gpencil_modifier_types.h" /* Needed for all enum type definitions. */
|
||||
|
||||
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -26,7 +24,7 @@ struct Object;
|
||||
typedef void (*GreasePencilIDWalkFunc)(void *user_data,
|
||||
struct Object *ob,
|
||||
struct ID **idpoin,
|
||||
LibraryForeachIDCallbackFlag cb_flag);
|
||||
int cb_flag);
|
||||
|
||||
/**
|
||||
* Free grease pencil modifier data
|
||||
|
||||
@@ -31,7 +31,7 @@ struct LibraryForeachIDData;
|
||||
struct Main;
|
||||
|
||||
/* Tips for the callback for cases it's gonna to modify the pointer. */
|
||||
enum LibraryForeachIDCallbackFlag {
|
||||
enum {
|
||||
IDWALK_CB_NOP = 0,
|
||||
IDWALK_CB_NEVER_NULL = (1 << 0),
|
||||
IDWALK_CB_NEVER_SELF = (1 << 1),
|
||||
@@ -114,7 +114,6 @@ enum LibraryForeachIDCallbackFlag {
|
||||
IDWALK_CB_OVERRIDE_LIBRARY_HIERARCHY_DEFAULT = (1 << 18),
|
||||
|
||||
};
|
||||
ENUM_OPERATORS(LibraryForeachIDCallbackFlag, IDWALK_CB_OVERRIDE_LIBRARY_HIERARCHY_DEFAULT);
|
||||
|
||||
enum {
|
||||
IDWALK_RET_NOP = 0,
|
||||
@@ -147,7 +146,7 @@ struct LibraryIDLinkCallbackData {
|
||||
*/
|
||||
ID *self_id;
|
||||
ID **id_pointer;
|
||||
LibraryForeachIDCallbackFlag cb_flag;
|
||||
int cb_flag;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -158,7 +157,7 @@ struct LibraryIDLinkCallbackData {
|
||||
using LibraryIDLinkCallback = int(LibraryIDLinkCallbackData *cb_data);
|
||||
|
||||
/* Flags for the foreach function itself. */
|
||||
enum LibraryForeachIDFlag {
|
||||
enum {
|
||||
IDWALK_NOP = 0,
|
||||
/**
|
||||
* The callback will never modify the ID pointers it processes.
|
||||
@@ -230,20 +229,17 @@ enum LibraryForeachIDFlag {
|
||||
* proper lib_linking and expanding of older files). */
|
||||
IDWALK_DO_DEPRECATED_POINTERS = (1 << 11),
|
||||
};
|
||||
ENUM_OPERATORS(LibraryForeachIDFlag, IDWALK_DO_DEPRECATED_POINTERS);
|
||||
|
||||
/**
|
||||
* Check whether current iteration over ID usages should be stopped or not.
|
||||
* \return true if the iteration should be stopped, false otherwise.
|
||||
*/
|
||||
bool BKE_lib_query_foreachid_iter_stop(const LibraryForeachIDData *data);
|
||||
void BKE_lib_query_foreachid_process(LibraryForeachIDData *data,
|
||||
ID **id_pp,
|
||||
LibraryForeachIDCallbackFlag cb_flag);
|
||||
LibraryForeachIDFlag BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data);
|
||||
void BKE_lib_query_foreachid_process(LibraryForeachIDData *data, ID **id_pp, int cb_flag);
|
||||
int BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data);
|
||||
Main *BKE_lib_query_foreachid_process_main_get(const LibraryForeachIDData *data);
|
||||
int BKE_lib_query_foreachid_process_callback_flag_override(LibraryForeachIDData *data,
|
||||
LibraryForeachIDCallbackFlag cb_flag,
|
||||
int cb_flag,
|
||||
bool do_replace);
|
||||
|
||||
/** Should typically only be used when processing deprecated ID types (like IPO ones). */
|
||||
@@ -311,7 +307,7 @@ void BKE_library_foreach_ID_link(Main *bmain,
|
||||
ID *id,
|
||||
blender::FunctionRef<LibraryIDLinkCallback> callback,
|
||||
void *user_data,
|
||||
LibraryForeachIDFlag flag);
|
||||
int flag);
|
||||
|
||||
/**
|
||||
* Apply `callback` to all ID usages of the data as defined by `subdata_foreach_id`. Useful to e.g.
|
||||
@@ -349,7 +345,7 @@ void BKE_library_foreach_subdata_id(
|
||||
blender::FunctionRef<void(LibraryForeachIDData *data)> subdata_foreach_id,
|
||||
blender::FunctionRef<LibraryIDLinkCallback> callback,
|
||||
void *user_data,
|
||||
const LibraryForeachIDFlag flag);
|
||||
const int flag);
|
||||
|
||||
/**
|
||||
* Re-usable function, use when replacing ID's.
|
||||
|
||||
@@ -25,8 +25,6 @@
|
||||
#include "BLI_compiler_attrs.h"
|
||||
#include "BLI_sys_types.h"
|
||||
|
||||
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */
|
||||
|
||||
struct BLI_mempool;
|
||||
struct BlendThumbnail;
|
||||
struct GHash;
|
||||
@@ -61,7 +59,7 @@ struct MainIDRelationsEntryItem {
|
||||
/* Session uid of the `id_pointer`. */
|
||||
uint session_uid;
|
||||
|
||||
LibraryForeachIDCallbackFlag usage_flag; /* Using IDWALK_ enums, defined in BKE_lib_query.hh */
|
||||
int usage_flag; /* Using IDWALK_ enums, defined in BKE_lib_query.hh */
|
||||
};
|
||||
|
||||
struct MainIDRelationsEntry {
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
#include "BLI_math_matrix_types.hh"
|
||||
#include "BLI_span.hh"
|
||||
|
||||
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */
|
||||
|
||||
#include "DNA_modifier_types.h" /* Needed for all enum type definitions. */
|
||||
|
||||
#include "DNA_customdata_types.h"
|
||||
@@ -130,10 +128,7 @@ enum ModifierTypeFlag {
|
||||
};
|
||||
ENUM_OPERATORS(ModifierTypeFlag, eModifierTypeFlag_AcceptsGreasePencil)
|
||||
|
||||
using IDWalkFunc = void (*)(void *user_data,
|
||||
Object *ob,
|
||||
ID **idpoin,
|
||||
LibraryForeachIDCallbackFlag cb_flag);
|
||||
using IDWalkFunc = void (*)(void *user_data, Object *ob, ID **idpoin, int cb_flag);
|
||||
using TexWalkFunc = void (*)(void *user_data,
|
||||
Object *ob,
|
||||
ModifierData *md,
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
#include "BLI_ordered_edge.hh"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */
|
||||
|
||||
#include "DNA_particle_types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -535,7 +533,7 @@ void particle_system_update(struct Depsgraph *depsgraph,
|
||||
typedef void (*ParticleSystemIDFunc)(struct ParticleSystem *psys,
|
||||
struct ID **idpoin,
|
||||
void *userdata,
|
||||
LibraryForeachIDCallbackFlag cb_flag);
|
||||
int cb_flag);
|
||||
|
||||
void BKE_particlesystem_id_loop(struct ParticleSystem *psys,
|
||||
ParticleSystemIDFunc func,
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -61,7 +59,7 @@ void BKE_rigidbody_object_copy(struct Main *bmain,
|
||||
typedef void (*RigidbodyWorldIDFunc)(struct RigidBodyWorld *rbw,
|
||||
struct ID **idpoin,
|
||||
void *userdata,
|
||||
LibraryForeachIDCallbackFlag cb_flag);
|
||||
int cb_flag);
|
||||
|
||||
void BKE_rigidbody_world_id_loop(struct RigidBodyWorld *rbw,
|
||||
RigidbodyWorldIDFunc func,
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
#include "BLI_compiler_attrs.h"
|
||||
#include "DNA_shader_fx_types.h" /* Needed for all enum type definitions. */
|
||||
|
||||
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -56,7 +54,7 @@ typedef enum {
|
||||
typedef void (*ShaderFxIDWalkFunc)(void *user_data,
|
||||
struct Object *ob,
|
||||
struct ID **idpoin,
|
||||
LibraryForeachIDCallbackFlag cb_flag);
|
||||
int cb_flag);
|
||||
typedef void (*ShaderFxTexWalkFunc)(void *user_data,
|
||||
struct Object *ob,
|
||||
struct ShaderFxData *fx,
|
||||
|
||||
@@ -256,10 +256,10 @@ static void action_foreach_id(ID *id, LibraryForeachIDData *data)
|
||||
* NOTE: early-returns by BKE_LIB_FOREACHID_PROCESS_... macros are forbidden in non-readonly
|
||||
* cases (see #IDWALK_RET_STOP_ITER documentation). */
|
||||
|
||||
const LibraryForeachIDFlag flag = BKE_lib_query_foreachid_process_flags_get(data);
|
||||
const int flag = BKE_lib_query_foreachid_process_flags_get(data);
|
||||
const bool is_readonly = flag & IDWALK_READONLY;
|
||||
|
||||
constexpr LibraryForeachIDCallbackFlag idwalk_flags = IDWALK_CB_NEVER_SELF | IDWALK_CB_LOOPBACK;
|
||||
constexpr int idwalk_flags = IDWALK_CB_NEVER_SELF | IDWALK_CB_LOOPBACK;
|
||||
|
||||
Main *bmain = BKE_lib_query_foreachid_process_main_get(data);
|
||||
|
||||
|
||||
@@ -779,7 +779,7 @@ static void reuse_bmain_data_invalid_local_usages_fix(ReuseOldBMainData *reuse_d
|
||||
nullptr;
|
||||
|
||||
BKE_library_foreach_ID_link(
|
||||
new_bmain, id_iter, reuse_bmain_data_invalid_local_usages_fix_cb, reuse_data, IDWALK_NOP);
|
||||
new_bmain, id_iter, reuse_bmain_data_invalid_local_usages_fix_cb, reuse_data, 0);
|
||||
|
||||
/* Liboverrides who lost their reference should not be liboverrides anymore, but regular IDs.
|
||||
*/
|
||||
|
||||
@@ -239,11 +239,11 @@ static void collection_foreach_id(ID *id, LibraryForeachIDData *data)
|
||||
LISTBASE_FOREACH (CollectionParent *, parent, &collection->runtime.parents) {
|
||||
/* XXX This is very weak. The whole idea of keeping pointers to private IDs is very bad
|
||||
* anyway... */
|
||||
const LibraryForeachIDCallbackFlag cb_flag =
|
||||
((parent->collection != nullptr && (data_flags & IDWALK_NO_ORIG_POINTERS_ACCESS) == 0 &&
|
||||
(parent->collection->id.flag & ID_FLAG_EMBEDDED_DATA) != 0) ?
|
||||
IDWALK_CB_EMBEDDED_NOT_OWNING :
|
||||
IDWALK_CB_NOP);
|
||||
const int cb_flag = ((parent->collection != nullptr &&
|
||||
(data_flags & IDWALK_NO_ORIG_POINTERS_ACCESS) == 0 &&
|
||||
(parent->collection->id.flag & ID_FLAG_EMBEDDED_DATA) != 0) ?
|
||||
IDWALK_CB_EMBEDDED_NOT_OWNING :
|
||||
IDWALK_CB_NOP);
|
||||
BKE_LIB_FOREACHID_PROCESS_IDSUPER(
|
||||
data, parent->collection, IDWALK_CB_NEVER_SELF | IDWALK_CB_LOOPBACK | cb_flag);
|
||||
}
|
||||
|
||||
@@ -356,7 +356,7 @@ static void gpencil_modifier_foreach_ID_link(GpencilModifierData *md,
|
||||
static void modifier_free_data_id_us_cb(void * /*user_data*/,
|
||||
Object * /*ob*/,
|
||||
ID **idpoin,
|
||||
const LibraryForeachIDCallbackFlag cb_flag)
|
||||
int cb_flag)
|
||||
{
|
||||
ID *id = *idpoin;
|
||||
if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) {
|
||||
|
||||
@@ -621,7 +621,7 @@ static int id_copy_libmanagement_cb(LibraryIDLinkCallbackData *cb_data)
|
||||
{
|
||||
ID **id_pointer = cb_data->id_pointer;
|
||||
ID *id = *id_pointer;
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
IDCopyLibManagementData *data = static_cast<IDCopyLibManagementData *>(cb_data->user_data);
|
||||
|
||||
/* Remap self-references to new copied ID. */
|
||||
@@ -1063,7 +1063,7 @@ bool id_single_user(bContext *C, ID *id, PointerRNA *ptr, PropertyRNA *prop)
|
||||
static int libblock_management_us_plus(LibraryIDLinkCallbackData *cb_data)
|
||||
{
|
||||
ID **id_pointer = cb_data->id_pointer;
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
if (cb_flag & IDWALK_CB_USER) {
|
||||
id_us_plus(*id_pointer);
|
||||
}
|
||||
@@ -1077,7 +1077,7 @@ static int libblock_management_us_plus(LibraryIDLinkCallbackData *cb_data)
|
||||
static int libblock_management_us_min(LibraryIDLinkCallbackData *cb_data)
|
||||
{
|
||||
ID **id_pointer = cb_data->id_pointer;
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
if (cb_flag & IDWALK_CB_USER) {
|
||||
id_us_min(*id_pointer);
|
||||
}
|
||||
@@ -1950,7 +1950,7 @@ void BKE_main_id_newptr_and_tag_clear(Main *bmain)
|
||||
static int id_refcount_recompute_callback(LibraryIDLinkCallbackData *cb_data)
|
||||
{
|
||||
ID **id_pointer = cb_data->id_pointer;
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
const bool do_linked_only = bool(POINTER_AS_INT(cb_data->user_data));
|
||||
|
||||
if (*id_pointer == nullptr) {
|
||||
|
||||
@@ -44,11 +44,11 @@ struct LibraryForeachIDData {
|
||||
ID *self_id;
|
||||
|
||||
/** Flags controlling the behavior of the 'foreach id' looping code. */
|
||||
LibraryForeachIDFlag flag;
|
||||
int flag;
|
||||
/** Generic flags to be passed to all callback calls for current processed data. */
|
||||
LibraryForeachIDCallbackFlag cb_flag;
|
||||
int cb_flag;
|
||||
/** Callback flags that are forbidden for all callback calls for current processed data. */
|
||||
LibraryForeachIDCallbackFlag cb_flag_clear;
|
||||
int cb_flag_clear;
|
||||
|
||||
/* Function to call for every ID pointers of current processed data, and its opaque user data
|
||||
* pointer. */
|
||||
@@ -68,20 +68,18 @@ bool BKE_lib_query_foreachid_iter_stop(const LibraryForeachIDData *data)
|
||||
return (data->status & IDWALK_STOP) != 0;
|
||||
}
|
||||
|
||||
void BKE_lib_query_foreachid_process(LibraryForeachIDData *data,
|
||||
ID **id_pp,
|
||||
LibraryForeachIDCallbackFlag cb_flag)
|
||||
void BKE_lib_query_foreachid_process(LibraryForeachIDData *data, ID **id_pp, int cb_flag)
|
||||
{
|
||||
if (BKE_lib_query_foreachid_iter_stop(data)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const LibraryForeachIDFlag flag = data->flag;
|
||||
const int flag = data->flag;
|
||||
ID *old_id = *id_pp;
|
||||
|
||||
/* Update the callback flags with the ones defined (or forbidden) in `data` by the generic
|
||||
* caller code. */
|
||||
cb_flag = LibraryForeachIDCallbackFlag((cb_flag | data->cb_flag) & ~data->cb_flag_clear);
|
||||
cb_flag = ((cb_flag | data->cb_flag) & ~data->cb_flag_clear);
|
||||
|
||||
/* Update the callback flags with some extra information regarding overrides: all 'loopback',
|
||||
* 'internal', 'embedded' etc. ID pointers are never overridable. */
|
||||
@@ -119,7 +117,7 @@ void BKE_lib_query_foreachid_process(LibraryForeachIDData *data,
|
||||
}
|
||||
}
|
||||
|
||||
LibraryForeachIDFlag BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data)
|
||||
int BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data)
|
||||
{
|
||||
return data->flag;
|
||||
}
|
||||
@@ -129,10 +127,11 @@ Main *BKE_lib_query_foreachid_process_main_get(const LibraryForeachIDData *data)
|
||||
return data->bmain;
|
||||
}
|
||||
|
||||
int BKE_lib_query_foreachid_process_callback_flag_override(
|
||||
LibraryForeachIDData *data, const LibraryForeachIDCallbackFlag cb_flag, const bool do_replace)
|
||||
int BKE_lib_query_foreachid_process_callback_flag_override(LibraryForeachIDData *data,
|
||||
const int cb_flag,
|
||||
const bool do_replace)
|
||||
{
|
||||
const LibraryForeachIDCallbackFlag cb_flag_backup = data->cb_flag;
|
||||
const int cb_flag_backup = data->cb_flag;
|
||||
if (do_replace) {
|
||||
data->cb_flag = cb_flag;
|
||||
}
|
||||
@@ -147,7 +146,7 @@ static bool library_foreach_ID_link(Main *bmain,
|
||||
ID *id,
|
||||
blender::FunctionRef<LibraryIDLinkCallback> callback,
|
||||
void *user_data,
|
||||
LibraryForeachIDFlag flag,
|
||||
int flag,
|
||||
LibraryForeachIDData *inherit_data);
|
||||
|
||||
void BKE_lib_query_idpropertiesForeachIDLink_callback(IDProperty *id_prop, void *user_data)
|
||||
@@ -155,10 +154,9 @@ void BKE_lib_query_idpropertiesForeachIDLink_callback(IDProperty *id_prop, void
|
||||
BLI_assert(id_prop->type == IDP_ID);
|
||||
|
||||
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
|
||||
const LibraryForeachIDCallbackFlag cb_flag = IDWALK_CB_USER |
|
||||
((id_prop->flag & IDP_FLAG_OVERRIDABLE_LIBRARY) ?
|
||||
IDWALK_CB_NOP :
|
||||
IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE);
|
||||
const int cb_flag = IDWALK_CB_USER | ((id_prop->flag & IDP_FLAG_OVERRIDABLE_LIBRARY) ?
|
||||
0 :
|
||||
IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE);
|
||||
BKE_LIB_FOREACHID_PROCESS_ID(data, id_prop->data.pointer, cb_flag);
|
||||
}
|
||||
|
||||
@@ -166,7 +164,7 @@ void BKE_library_foreach_ID_embedded(LibraryForeachIDData *data, ID **id_pp)
|
||||
{
|
||||
/* Needed e.g. for callbacks handling relationships. This call should be absolutely read-only. */
|
||||
ID *id = *id_pp;
|
||||
const LibraryForeachIDFlag flag = data->flag;
|
||||
const int flag = data->flag;
|
||||
|
||||
BKE_lib_query_foreachid_process(data, id_pp, IDWALK_CB_EMBEDDED);
|
||||
if (BKE_lib_query_foreachid_iter_stop(data)) {
|
||||
@@ -212,7 +210,7 @@ static bool library_foreach_ID_link(Main *bmain,
|
||||
ID *id,
|
||||
blender::FunctionRef<LibraryIDLinkCallback> callback,
|
||||
void *user_data,
|
||||
LibraryForeachIDFlag flag,
|
||||
int flag,
|
||||
LibraryForeachIDData *inherit_data)
|
||||
{
|
||||
LibraryForeachIDData data{};
|
||||
@@ -306,11 +304,11 @@ static bool library_foreach_ID_link(Main *bmain,
|
||||
* In that case, we do not want to generate those 'generic flags' from our current sub-data ID
|
||||
* (the node tree), but re-use those generated for the 'owner' ID (the material). */
|
||||
if (inherit_data == nullptr) {
|
||||
data.cb_flag = ID_IS_LINKED(id) ? IDWALK_CB_INDIRECT_USAGE : IDWALK_CB_NOP;
|
||||
data.cb_flag = ID_IS_LINKED(id) ? IDWALK_CB_INDIRECT_USAGE : 0;
|
||||
/* When an ID is defined as not reference-counting its ID usages, it should never do it. */
|
||||
data.cb_flag_clear = (id->tag & ID_TAG_NO_USER_REFCOUNT) ?
|
||||
IDWALK_CB_USER | IDWALK_CB_USER_ONE :
|
||||
IDWALK_CB_NOP;
|
||||
0;
|
||||
}
|
||||
else {
|
||||
data.cb_flag = inherit_data->cb_flag;
|
||||
@@ -417,7 +415,7 @@ void BKE_library_foreach_ID_link(Main *bmain,
|
||||
ID *id,
|
||||
blender::FunctionRef<LibraryIDLinkCallback> callback,
|
||||
void *user_data,
|
||||
const LibraryForeachIDFlag flag)
|
||||
int flag)
|
||||
{
|
||||
library_foreach_ID_link(bmain, nullptr, id, callback, user_data, flag, nullptr);
|
||||
}
|
||||
@@ -440,7 +438,7 @@ void BKE_library_foreach_subdata_id(
|
||||
blender::FunctionRef<void(LibraryForeachIDData *data)> subdata_foreach_id,
|
||||
blender::FunctionRef<LibraryIDLinkCallback> callback,
|
||||
void *user_data,
|
||||
const LibraryForeachIDFlag flag)
|
||||
const int flag)
|
||||
{
|
||||
BLI_assert((flag & (IDWALK_RECURSE | IDWALK_DO_INTERNAL_RUNTIME_POINTERS |
|
||||
IDWALK_DO_LIBRARY_POINTER | IDWALK_INCLUDE_UI)) == 0);
|
||||
@@ -521,7 +519,7 @@ struct IDUsersIter {
|
||||
static int foreach_libblock_id_users_callback(LibraryIDLinkCallbackData *cb_data)
|
||||
{
|
||||
ID **id_p = cb_data->id_pointer;
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
IDUsersIter *iter = static_cast<IDUsersIter *>(cb_data->user_data);
|
||||
|
||||
if (*id_p) {
|
||||
@@ -982,7 +980,7 @@ static int foreach_libblock_used_linked_data_tag_clear_cb(LibraryIDLinkCallbackD
|
||||
{
|
||||
ID *self_id = cb_data->self_id;
|
||||
ID **id_p = cb_data->id_pointer;
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
bool *is_changed = static_cast<bool *>(cb_data->user_data);
|
||||
|
||||
if (*id_p) {
|
||||
|
||||
@@ -173,7 +173,7 @@ static void foreach_libblock_remap_callback_apply(ID *id_owner,
|
||||
|
||||
static int foreach_libblock_remap_callback(LibraryIDLinkCallbackData *cb_data)
|
||||
{
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
|
||||
/* NOTE: Support remapping of `IDWALK_CB_EMBEDDED_NON_OWNING` pointers, this is necessary in some
|
||||
* complex low-level ID manipulation cases (e.g. in ID swapping, see #BKE_lib_id_swap & co).
|
||||
@@ -496,16 +496,17 @@ static void libblock_remap_data(
|
||||
};
|
||||
|
||||
const bool include_ui = (remap_flags & ID_REMAP_FORCE_UI_POINTERS) != 0;
|
||||
const LibraryForeachIDFlag foreach_id_flags =
|
||||
(((remap_flags & ID_REMAP_FORCE_INTERNAL_RUNTIME_POINTERS) != 0 ?
|
||||
IDWALK_DO_INTERNAL_RUNTIME_POINTERS :
|
||||
IDWALK_NOP) |
|
||||
(include_ui ? IDWALK_INCLUDE_UI : IDWALK_NOP) |
|
||||
const int foreach_id_flags = (((remap_flags & ID_REMAP_FORCE_INTERNAL_RUNTIME_POINTERS) != 0 ?
|
||||
IDWALK_DO_INTERNAL_RUNTIME_POINTERS :
|
||||
IDWALK_NOP) |
|
||||
(include_ui ? IDWALK_INCLUDE_UI : IDWALK_NOP) |
|
||||
|
||||
((remap_flags & ID_REMAP_NO_ORIG_POINTERS_ACCESS) != 0 ? IDWALK_NO_ORIG_POINTERS_ACCESS :
|
||||
IDWALK_NOP) |
|
||||
((remap_flags & ID_REMAP_DO_LIBRARY_POINTERS) != 0 ? IDWALK_DO_LIBRARY_POINTER :
|
||||
IDWALK_NOP));
|
||||
((remap_flags & ID_REMAP_NO_ORIG_POINTERS_ACCESS) != 0 ?
|
||||
IDWALK_NO_ORIG_POINTERS_ACCESS :
|
||||
IDWALK_NOP) |
|
||||
((remap_flags & ID_REMAP_DO_LIBRARY_POINTERS) != 0 ?
|
||||
IDWALK_DO_LIBRARY_POINTER :
|
||||
IDWALK_NOP));
|
||||
|
||||
id_remapper.iter(libblock_remap_reset_remapping_status_fn);
|
||||
|
||||
@@ -880,7 +881,7 @@ static void libblock_relink_to_newid_prepare_data(Main *bmain,
|
||||
RelinkToNewIDData *relink_data);
|
||||
static int id_relink_to_newid_looper(LibraryIDLinkCallbackData *cb_data)
|
||||
{
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
/* NOTE: For now, support remapping `IDWALK_CB_EMBEDDED_NON_OWNING` pointers. */
|
||||
if (cb_flag & (IDWALK_CB_EMBEDDED | IDWALK_CB_OVERRIDE_LIBRARY_REFERENCE)) {
|
||||
return IDWALK_RET_NOP;
|
||||
@@ -914,7 +915,7 @@ static void libblock_relink_to_newid_prepare_data(Main *bmain,
|
||||
|
||||
id->tag &= ~ID_TAG_NEW;
|
||||
relink_data->ids.append(id);
|
||||
BKE_library_foreach_ID_link(bmain, id, id_relink_to_newid_looper, relink_data, IDWALK_NOP);
|
||||
BKE_library_foreach_ID_link(bmain, id, id_relink_to_newid_looper, relink_data, 0);
|
||||
}
|
||||
|
||||
void BKE_libblock_relink_to_newid(Main *bmain, ID *id, const int remap_flag)
|
||||
|
||||
@@ -491,7 +491,7 @@ static int main_relations_create_idlink_cb(LibraryIDLinkCallbackData *cb_data)
|
||||
MainIDRelations *bmain_relations = static_cast<MainIDRelations *>(cb_data->user_data);
|
||||
ID *self_id = cb_data->self_id;
|
||||
ID **id_pointer = cb_data->id_pointer;
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
|
||||
if (*id_pointer) {
|
||||
MainIDRelationsEntry **entry_p;
|
||||
@@ -558,10 +558,8 @@ void BKE_main_relations_create(Main *bmain, const short flag)
|
||||
|
||||
ID *id;
|
||||
FOREACH_MAIN_ID_BEGIN (bmain, id) {
|
||||
const LibraryForeachIDFlag idwalk_flag = IDWALK_READONLY |
|
||||
((flag & MAINIDRELATIONS_INCLUDE_UI) != 0 ?
|
||||
IDWALK_INCLUDE_UI :
|
||||
IDWALK_NOP);
|
||||
const int idwalk_flag = IDWALK_READONLY |
|
||||
((flag & MAINIDRELATIONS_INCLUDE_UI) != 0 ? IDWALK_INCLUDE_UI : 0);
|
||||
|
||||
/* Ensure all IDs do have an entry, even if they are not connected to any other. */
|
||||
MainIDRelationsEntry **entry_p;
|
||||
|
||||
@@ -905,7 +905,7 @@ static int foreach_libblock_make_usercounts_callback(LibraryIDLinkCallbackData *
|
||||
return IDWALK_RET_NOP;
|
||||
}
|
||||
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
if (cb_flag & IDWALK_CB_USER) {
|
||||
id_us_plus(*id_p);
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ ModifierData *BKE_modifier_new(int type)
|
||||
static void modifier_free_data_id_us_cb(void * /*user_data*/,
|
||||
Object * /*ob*/,
|
||||
ID **idpoin,
|
||||
const LibraryForeachIDCallbackFlag cb_flag)
|
||||
int cb_flag)
|
||||
{
|
||||
ID *id = *idpoin;
|
||||
if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) {
|
||||
@@ -335,7 +335,7 @@ void BKE_modifier_copydata_generic(const ModifierData *md_src,
|
||||
static void modifier_copy_data_id_us_cb(void * /*user_data*/,
|
||||
Object * /*ob*/,
|
||||
ID **idpoin,
|
||||
const LibraryForeachIDCallbackFlag cb_flag)
|
||||
int cb_flag)
|
||||
{
|
||||
ID *id = *idpoin;
|
||||
if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) {
|
||||
|
||||
@@ -350,18 +350,17 @@ static void object_free_data(ID *id)
|
||||
static void library_foreach_modifiersForeachIDLink(void *user_data,
|
||||
Object * /*object*/,
|
||||
ID **id_pointer,
|
||||
const LibraryForeachIDCallbackFlag cb_flag)
|
||||
int cb_flag)
|
||||
{
|
||||
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
|
||||
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
|
||||
data, BKE_lib_query_foreachid_process(data, id_pointer, cb_flag));
|
||||
}
|
||||
|
||||
static void library_foreach_gpencil_modifiersForeachIDLink(
|
||||
void *user_data,
|
||||
Object * /*object*/,
|
||||
ID **id_pointer,
|
||||
const LibraryForeachIDCallbackFlag cb_flag)
|
||||
static void library_foreach_gpencil_modifiersForeachIDLink(void *user_data,
|
||||
Object * /*object*/,
|
||||
ID **id_pointer,
|
||||
int cb_flag)
|
||||
{
|
||||
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
|
||||
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
|
||||
@@ -371,7 +370,7 @@ static void library_foreach_gpencil_modifiersForeachIDLink(
|
||||
static void library_foreach_shaderfxForeachIDLink(void *user_data,
|
||||
Object * /*object*/,
|
||||
ID **id_pointer,
|
||||
const LibraryForeachIDCallbackFlag cb_flag)
|
||||
int cb_flag)
|
||||
{
|
||||
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
|
||||
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
|
||||
@@ -384,7 +383,7 @@ static void library_foreach_constraintObjectLooper(bConstraint * /*con*/,
|
||||
void *user_data)
|
||||
{
|
||||
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
|
||||
const LibraryForeachIDCallbackFlag cb_flag = is_reference ? IDWALK_CB_USER : IDWALK_CB_NOP;
|
||||
const int cb_flag = is_reference ? IDWALK_CB_USER : IDWALK_CB_NOP;
|
||||
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
|
||||
data, BKE_lib_query_foreachid_process(data, id_pointer, cb_flag));
|
||||
}
|
||||
@@ -392,7 +391,7 @@ static void library_foreach_constraintObjectLooper(bConstraint * /*con*/,
|
||||
static void library_foreach_particlesystemsObjectLooper(ParticleSystem * /*psys*/,
|
||||
ID **id_pointer,
|
||||
void *user_data,
|
||||
const LibraryForeachIDCallbackFlag cb_flag)
|
||||
int cb_flag)
|
||||
{
|
||||
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
|
||||
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
|
||||
|
||||
@@ -5020,7 +5020,7 @@ struct ParticleSystemIDLoopForModifier {
|
||||
static void particlesystem_modifiersForeachIDLink(void *user_data,
|
||||
Object * /*object*/,
|
||||
ID **id_pointer,
|
||||
const LibraryForeachIDCallbackFlag cb_flag)
|
||||
int cb_flag)
|
||||
{
|
||||
ParticleSystemIDLoopForModifier *data = (ParticleSystemIDLoopForModifier *)user_data;
|
||||
data->func(data->psys, id_pointer, data->userdata, cb_flag);
|
||||
|
||||
@@ -468,7 +468,7 @@ static void scene_free_data(ID *id)
|
||||
static void scene_foreach_rigidbodyworldSceneLooper(RigidBodyWorld * /*rbw*/,
|
||||
ID **id_pointer,
|
||||
void *user_data,
|
||||
const LibraryForeachIDCallbackFlag cb_flag)
|
||||
int cb_flag)
|
||||
{
|
||||
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
|
||||
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
|
||||
@@ -787,8 +787,7 @@ static void scene_foreach_layer_collection(LibraryForeachIDData *data,
|
||||
if ((data_flags & IDWALK_NO_ORIG_POINTERS_ACCESS) == 0 && lc->collection != nullptr) {
|
||||
BLI_assert(is_master == ((lc->collection->id.flag & ID_FLAG_EMBEDDED_DATA) != 0));
|
||||
}
|
||||
const LibraryForeachIDCallbackFlag cb_flag = is_master ? IDWALK_CB_EMBEDDED_NOT_OWNING :
|
||||
IDWALK_CB_NOP;
|
||||
const int cb_flag = is_master ? IDWALK_CB_EMBEDDED_NOT_OWNING : IDWALK_CB_NOP;
|
||||
BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, lc->collection, cb_flag | IDWALK_CB_DIRECT_WEAK_LINK);
|
||||
scene_foreach_layer_collection(data, &lc->layer_collections, false);
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ ShaderFxData *BKE_shaderfx_new(int type)
|
||||
static void shaderfx_free_data_id_us_cb(void * /*user_data*/,
|
||||
Object * /*ob*/,
|
||||
ID **idpoin,
|
||||
const LibraryForeachIDCallbackFlag cb_flag)
|
||||
int cb_flag)
|
||||
{
|
||||
ID *id = *idpoin;
|
||||
if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) {
|
||||
@@ -175,7 +175,7 @@ void BKE_shaderfx_copydata_generic(const ShaderFxData *fx_src, ShaderFxData *fx_
|
||||
static void shaderfx_copy_data_id_us_cb(void * /*user_data*/,
|
||||
Object * /*ob*/,
|
||||
ID **idpoin,
|
||||
const LibraryForeachIDCallbackFlag cb_flag)
|
||||
int cb_flag)
|
||||
{
|
||||
ID *id = *idpoin;
|
||||
if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) {
|
||||
|
||||
@@ -3334,10 +3334,8 @@ static void lib_link_all(FileData *fd, Main *bmain)
|
||||
if ((id->tag & ID_TAG_NEED_LINK) != 0) {
|
||||
/* Not all original pointer values can be considered as valid.
|
||||
* Handling of DNA deprecated data should never be needed in undo case. */
|
||||
const LibraryForeachIDFlag flag = IDWALK_NO_ORIG_POINTERS_ACCESS | IDWALK_INCLUDE_UI |
|
||||
((fd->flags & FD_FLAGS_IS_MEMFILE) ?
|
||||
IDWALK_NOP :
|
||||
IDWALK_DO_DEPRECATED_POINTERS);
|
||||
const int flag = IDWALK_NO_ORIG_POINTERS_ACCESS | IDWALK_INCLUDE_UI |
|
||||
((fd->flags & FD_FLAGS_IS_MEMFILE) ? 0 : IDWALK_DO_DEPRECATED_POINTERS);
|
||||
BKE_library_foreach_ID_link(bmain, id, lib_link_cb, &reader, flag);
|
||||
|
||||
after_liblink_id_process(&reader, id);
|
||||
@@ -4250,10 +4248,10 @@ void BLO_expand_main(void *fdhandle, Main *mainvar, BLOExpandDoitCallback callba
|
||||
* Expanding should _not_ require processing of UI ID pointers.
|
||||
* Expanding should never modify ID pointers themselves.
|
||||
* Handling of DNA deprecated data should never be needed in undo case. */
|
||||
const LibraryForeachIDFlag flag = IDWALK_READONLY | IDWALK_NO_ORIG_POINTERS_ACCESS |
|
||||
((!fd || (fd->flags & FD_FLAGS_IS_MEMFILE)) ?
|
||||
IDWALK_NOP :
|
||||
IDWALK_DO_DEPRECATED_POINTERS);
|
||||
const int flag = IDWALK_READONLY | IDWALK_NO_ORIG_POINTERS_ACCESS |
|
||||
((!fd || (fd->flags & FD_FLAGS_IS_MEMFILE)) ?
|
||||
0 :
|
||||
IDWALK_DO_DEPRECATED_POINTERS);
|
||||
BKE_library_foreach_ID_link(nullptr, id_iter, expand_cb, &expander, flag);
|
||||
|
||||
do_it = true;
|
||||
|
||||
@@ -1244,7 +1244,7 @@ static int write_id_direct_linked_data_process_cb(LibraryIDLinkCallbackData *cb_
|
||||
{
|
||||
ID *self_id = cb_data->self_id;
|
||||
ID *id = *cb_data->id_pointer;
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
|
||||
if (id == nullptr || !ID_IS_LINKED(id)) {
|
||||
return IDWALK_RET_NOP;
|
||||
|
||||
@@ -2316,7 +2316,7 @@ void DepsgraphNodeBuilder::build_scene_speakers(Scene *scene, ViewLayer *view_la
|
||||
void DepsgraphNodeBuilder::modifier_walk(void *user_data,
|
||||
Object * /*object*/,
|
||||
ID **idpoin,
|
||||
LibraryForeachIDCallbackFlag /*cb_flag*/)
|
||||
int /*cb_flag*/)
|
||||
{
|
||||
BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
|
||||
ID *id = *idpoin;
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
|
||||
#include "BLI_span.hh"
|
||||
|
||||
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */
|
||||
|
||||
#include "intern/builder/deg_builder.h"
|
||||
#include "intern/builder/deg_builder_key.h"
|
||||
#include "intern/builder/deg_builder_map.h"
|
||||
@@ -313,7 +311,7 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder {
|
||||
static void modifier_walk(void *user_data,
|
||||
struct Object *object,
|
||||
struct ID **idpoin,
|
||||
LibraryForeachIDCallbackFlag cb_flag);
|
||||
int cb_flag);
|
||||
static void constraint_walk(bConstraint *constraint,
|
||||
ID **idpoin,
|
||||
bool is_reference,
|
||||
|
||||
@@ -3633,7 +3633,7 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDNode *id_node)
|
||||
void DepsgraphRelationBuilder::modifier_walk(void *user_data,
|
||||
Object * /*object*/,
|
||||
ID **idpoin,
|
||||
LibraryForeachIDCallbackFlag /*cb_flag*/)
|
||||
int /*cb_flag*/)
|
||||
{
|
||||
BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
|
||||
ID *id = *idpoin;
|
||||
|
||||
@@ -21,8 +21,6 @@
|
||||
#include "BLI_string.h"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */
|
||||
|
||||
#include "intern/builder/deg_builder.h"
|
||||
#include "intern/builder/deg_builder_key.h"
|
||||
#include "intern/builder/deg_builder_map.h"
|
||||
@@ -338,7 +336,7 @@ class DepsgraphRelationBuilder : public DepsgraphBuilder {
|
||||
static void modifier_walk(void *user_data,
|
||||
struct Object *object,
|
||||
struct ID **idpoin,
|
||||
LibraryForeachIDCallbackFlag cb_flag);
|
||||
int cb_flag);
|
||||
|
||||
static void constraint_walk(bConstraint *con, ID **idpoin, bool is_reference, void *user_data);
|
||||
|
||||
|
||||
@@ -2770,10 +2770,7 @@ struct tAnimFilterModifiersContext {
|
||||
};
|
||||
|
||||
/* dependency walker callback for modifier dependencies */
|
||||
static void animfilter_modifier_idpoin_cb(void *afm_ptr,
|
||||
Object *ob,
|
||||
ID **idpoin,
|
||||
LibraryForeachIDCallbackFlag /*cb_flag*/)
|
||||
static void animfilter_modifier_idpoin_cb(void *afm_ptr, Object *ob, ID **idpoin, int /*cb_flag*/)
|
||||
{
|
||||
tAnimFilterModifiersContext *afm = (tAnimFilterModifiersContext *)afm_ptr;
|
||||
ID *owner_id = &ob->id;
|
||||
|
||||
@@ -571,7 +571,7 @@ static int gather_frames_to_render_for_id(LibraryIDLinkCallbackData *cb_data)
|
||||
ID *id = *id_p;
|
||||
|
||||
ID *self_id = cb_data->self_id;
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
if (cb_flag == IDWALK_CB_LOOPBACK || id == self_id) {
|
||||
/* IDs may end up referencing themselves one way or the other, and those
|
||||
* (the self_id ones) have always already been processed. */
|
||||
|
||||
@@ -503,12 +503,10 @@ static void outliner_foreach_id(SpaceLink *space_link, LibraryForeachIDData *dat
|
||||
if (TSE_IS_REAL_ID(tselem)) {
|
||||
/* NOTE: Outliner ID pointers are never `IDWALK_CB_DIRECT_WEAK_LINK`, they should never
|
||||
* enforce keeping a reference to some linked data. */
|
||||
const LibraryForeachIDCallbackFlag cb_flag = (tselem->id != nullptr &&
|
||||
allow_pointer_access &&
|
||||
(tselem->id->flag & ID_FLAG_EMBEDDED_DATA) !=
|
||||
IDWALK_CB_NOP) ?
|
||||
IDWALK_CB_EMBEDDED_NOT_OWNING :
|
||||
IDWALK_CB_NOP;
|
||||
const int cb_flag = (tselem->id != nullptr && allow_pointer_access &&
|
||||
(tselem->id->flag & ID_FLAG_EMBEDDED_DATA) != 0) ?
|
||||
IDWALK_CB_EMBEDDED_NOT_OWNING :
|
||||
IDWALK_CB_NOP;
|
||||
BKE_LIB_FOREACHID_PROCESS_ID(data, tselem->id, cb_flag);
|
||||
}
|
||||
else if (!is_readonly) {
|
||||
|
||||
@@ -261,7 +261,7 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void
|
||||
{
|
||||
SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
|
||||
|
||||
walk(user_data, ob, (ID **)&smd->target, IDWALK_CB_NOP);
|
||||
walk(user_data, ob, (ID **)&smd->target, IDWALK_NOP);
|
||||
}
|
||||
|
||||
static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
|
||||
|
||||
@@ -68,7 +68,7 @@ static int foreach_libblock_id_user_map_callback(LibraryIDLinkCallbackData *cb_d
|
||||
|
||||
if (*id_p) {
|
||||
IDUserMapData *data = static_cast<IDUserMapData *>(cb_data->user_data);
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
|
||||
if (data->types_bitmap) {
|
||||
if (!id_check_type(*id_p, data->types_bitmap)) {
|
||||
@@ -247,7 +247,7 @@ static PyObject *bpy_user_map(PyObject * /*self*/, PyObject *args, PyObject *kwd
|
||||
|
||||
data_cb.id_curr = id;
|
||||
BKE_library_foreach_ID_link(
|
||||
nullptr, id, foreach_libblock_id_user_map_callback, &data_cb, IDWALK_NOP);
|
||||
nullptr, id, foreach_libblock_id_user_map_callback, &data_cb, IDWALK_CB_NOP);
|
||||
|
||||
if (data_cb.py_id_curr) {
|
||||
Py_DECREF(data_cb.py_id_curr);
|
||||
|
||||
@@ -3794,7 +3794,7 @@ static void previews_id_ensure(bContext *C, Scene *scene, ID *id)
|
||||
|
||||
static int previews_id_ensure_callback(LibraryIDLinkCallbackData *cb_data)
|
||||
{
|
||||
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
|
||||
const int cb_flag = cb_data->cb_flag;
|
||||
|
||||
if (cb_flag & (IDWALK_CB_EMBEDDED | IDWALK_CB_EMBEDDED_NOT_OWNING)) {
|
||||
return IDWALK_RET_NOP;
|
||||
|
||||
Reference in New Issue
Block a user