[Bf-blender-cvs] [2cc420f409] id_override_static: Merge branch 'master' into id_override_static
Bastien Montagne
noreply at git.blender.org
Tue Jan 31 11:51:05 CET 2017
Commit: 2cc420f409c9fc9b252214a917c38e1356120d5b
Author: Bastien Montagne
Date: Tue Jan 31 11:46:34 2017 +0100
Branches: id_override_static
https://developer.blender.org/rB2cc420f409c9fc9b252214a917c38e1356120d5b
Merge branch 'master' into id_override_static
Conflicts:
source/blender/blenkernel/intern/library_query.c
===================================================================
===================================================================
diff --cc source/blender/blenkernel/BKE_library.h
index 26f9b83cb3,72ae2cf4ef..a8d77c77bf
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@@ -85,9 -85,8 +85,9 @@@ void BKE_id_make_local_generic(struct M
bool id_make_local(struct Main *bmain, struct ID *id, const bool test, const bool force_local);
bool id_single_user(struct bContext *C, struct ID *id, struct PointerRNA *ptr, struct PropertyRNA *prop);
bool id_copy(struct Main *bmain, struct ID *id, struct ID **newid, bool test);
+void BKE_id_swap(struct ID *id_a, struct ID *id_b);
void id_sort_by_name(struct ListBase *lb, struct ID *id);
- void BKE_id_expand_local(struct ID *id);
+ void BKE_id_expand_local(struct Main *bmain, struct ID *id);
void BKE_id_copy_ensure_local(struct Main *bmain, struct ID *old_id, struct ID *new_id);
bool new_id(struct ListBase *lb, struct ID *id, const char *name);
diff --cc source/blender/blenkernel/intern/library_query.c
index 40943df0b5,9685f1f5af..1c7ec3cfc0
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@@ -313,13 -321,21 +321,25 @@@ void BKE_library_foreach_ID_link(Main *
#define CALLBACK_INVOKE(check_id_super, cb_flag) \
FOREACH_CALLBACK_INVOKE(&data, check_id_super, cb_flag)
+ if (id->override) {
- CALLBACK_INVOKE_ID(id->override->reference, IDWALK_USER);
++ CALLBACK_INVOKE_ID(id->override->reference, IDWALK_CB_USER);
+ }
+
- do {
+ for (; id != NULL; id = (flag & IDWALK_RECURSE) ? BLI_LINKSTACK_POP(data.ids_todo) : NULL) {
data.self_id = id;
- data.cd_flag = ID_IS_LINKED_DATABLOCK(id) ? IDWALK_INDIRECT_USAGE : 0;
+ data.cb_flag = ID_IS_LINKED_DATABLOCK(id) ? IDWALK_CB_INDIRECT_USAGE : 0;
+
+ if (bmain != NULL && bmain->relations != NULL && (flag & IDWALK_READONLY)) {
+ /* Note that this is minor optimization, even in worst cases (like id being an object with lots of
+ * drivers and constraints and modifiers, or material etc. with huge node tree),
+ * but we might as well use it (Main->relations is always assumed valid, it's responsability of code
+ * creating it to free it, especially if/when it starts modifying Main database). */
+ MainIDRelationsEntry *entry = BLI_ghash_lookup(bmain->relations->id_user_to_used, id);
+ for (; entry != NULL; entry = entry->next) {
+ FOREACH_CALLBACK_INVOKE_ID_PP(&data, entry->id_pointer, entry->usage_flag);
+ }
+ continue;
+ }
AnimData *adt = BKE_animdata_from_id(id);
if (adt) {
More information about the Bf-blender-cvs
mailing list