From b3f388dca9e547c12db277b8422c620ca3b64eaa Mon Sep 17 00:00:00 2001 From: Alexander Gavrilov Date: Sat, 16 Nov 2019 20:50:59 +0300 Subject: UI: support Copy To Selected and Alt-Click for PropertyGroup members. Rigify uses a property group to contain options of its rigs, so currently it is impossible to use Alt-Click or Copy To Selected to change a setting for multiple rigs at the same time. The main problem here is that there is no efficient way to find which bone the property group belongs to. To maintain performance, implement this by checking the active bone if it is known. Copy Data Path and related features still don't work, as data path calculation can't use context. Differential Revision: https://developer.blender.org/D6264 --- source/blender/blenkernel/BKE_context.h | 3 +++ source/blender/blenkernel/intern/context.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index 105f8e82343..88a27b67963 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -198,6 +198,9 @@ enum { PointerRNA CTX_data_pointer_get(const bContext *C, const char *member); PointerRNA CTX_data_pointer_get_type(const bContext *C, const char *member, StructRNA *type); +PointerRNA CTX_data_pointer_get_type_silent(const bContext *C, + const char *member, + StructRNA *type); ListBase CTX_data_collection_get(const bContext *C, const char *member); ListBase CTX_data_dir_get_ex(const bContext *C, const bool use_store, diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 2e4f756ce68..e3d95bb660f 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -466,6 +466,18 @@ PointerRNA CTX_data_pointer_get_type(const bContext *C, const char *member, Stru return PointerRNA_NULL; } +PointerRNA CTX_data_pointer_get_type_silent(const bContext *C, const char *member, StructRNA *type) +{ + PointerRNA ptr = CTX_data_pointer_get(C, member); + + if (ptr.data && RNA_struct_is_a(ptr.type, type)) { + return ptr; + } + else { + return PointerRNA_NULL; + } +} + ListBase CTX_data_collection_get(const bContext *C, const char *member) { bContextDataResult result; -- cgit v1.2.3