Fix Py's IDs user mapping: do not consider proxy_from here.

This is internal pointer helper for scene evaluation and tools, it's not exposed to bpy API anyway,
and can give false 'dependency cycles' in bpy.data.user_map() results.

Found by sybren in his Splode work.
This commit is contained in:
Bastien Montagne 2016-09-15 10:11:47 +02:00
parent fe1342ab9b
commit e007552442
Notes: blender-bot 2023-02-14 06:46:23 +01:00
Referenced by commit a2a5ae5b54, Fix Py's IDs user mapping: do not consider ShapeKeys' from here.
1 changed files with 7 additions and 1 deletions

View File

@ -40,6 +40,7 @@
#include "BKE_library_query.h"
#include "DNA_ID.h"
#include "DNA_object_types.h"
#include "bpy_util.h"
#include "bpy_rna_id_collection.h"
@ -81,7 +82,7 @@ static bool id_check_type(const ID *id, const BLI_bitmap *types_bitmap)
}
static int foreach_libblock_id_user_map_callback(
void *user_data, ID *UNUSED(self_id), ID **id_p, int UNUSED(cb_flag))
void *user_data, ID *self_id, ID **id_p, int UNUSED(cb_flag))
{
IDUserMapData *data = user_data;
@ -93,6 +94,11 @@ static int foreach_libblock_id_user_map_callback(
}
}
if ((GS(self_id->name) == ID_OB) && (id_p == (ID **)&((Object *)self_id)->proxy_from)) {
/* We skip proxy_from here, since it some internal pointer which is not irrelevant info for py/API level. */
return IDWALK_RET_NOP;
}
/* pyrna_struct_hash() uses ptr.data only,
* but pyrna_struct_richcmp() uses also ptr.type,
* so we need to create a valid PointerRNA here...