diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-10-08 11:18:30 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-10-08 11:25:51 +0300 |
commit | 9f2e225f5c9881e4bff5d78e6380a73a380d5bd8 (patch) | |
tree | 5917adf96bfac04b39fd6445d4839d159ab1521b | |
parent | be92598a85f6014b4b03fc910a192829e1622fef (diff) |
Add missing object-data ID loop pointer
-rw-r--r-- | source/blender/blenkernel/intern/library_query.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c index 0fb8da9afc1..3ba53fa3f99 100644 --- a/source/blender/blenkernel/intern/library_query.c +++ b/source/blender/blenkernel/intern/library_query.c @@ -81,16 +81,19 @@ /* TODO(sergey): Make it less creepy without too much duplicated code.. */ \ return; \ } \ - } (void) 0 + } ((void)0) #define FOREACH_CALLBACK_INVOKE_ID(self_id, id, flag, callback, user_data, cb_flag) \ - FOREACH_CALLBACK_INVOKE_ID_PP(self_id, &(id), flag, callback, user_data, cb_flag) \ + { \ + CHECK_TYPE_ANY(id, ID *, void *); \ + FOREACH_CALLBACK_INVOKE_ID_PP(self_id, (ID **)&(id), flag, callback, user_data, cb_flag); \ + } ((void)0) #define FOREACH_CALLBACK_INVOKE(self_id, id_super, flag, callback, user_data, cb_flag) \ { \ CHECK_TYPE(&((id_super)->id), ID *); \ FOREACH_CALLBACK_INVOKE_ID_PP(self_id, (ID **)&id_super, flag, callback, user_data, cb_flag); \ - } (void) 0 + } ((void)0) typedef struct LibraryForeachIDData { ID *self_id; @@ -230,6 +233,19 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u case ID_OB: { Object *object = (Object *) id; + + /* object data special case */ + if (object->type == OB_EMPTY) { + /* empty can have NULL or Image */ + CALLBACK_INVOKE_ID(object->data, IDWALK_NOP); + } + else { + /* when set, this can't be NULL */ + if (object->data) { + CALLBACK_INVOKE_ID(object->data, IDWALK_NEVER_NULL); + } + } + CALLBACK_INVOKE(object->parent, IDWALK_NOP); CALLBACK_INVOKE(object->track, IDWALK_NOP); CALLBACK_INVOKE(object->proxy, IDWALK_NOP); |