diff options
Diffstat (limited to 'source/blender/makesrna/intern/rna_access.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_access.c | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index bfa1e7cef93..114ded9b0c0 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -54,6 +54,8 @@ #include "BKE_main.h" #include "BKE_report.h" +#include "DEG_depsgraph.h" + #include "RNA_access.h" #include "RNA_define.h" #include "RNA_enum_types.h" @@ -62,7 +64,6 @@ /* flush updates */ #include "DNA_object_types.h" -#include "BKE_depsgraph.h" #include "WM_types.h" #include "rna_internal.h" @@ -560,7 +561,7 @@ const char *RNA_struct_translation_context(const StructRNA *type) return type->translation_context; } -PropertyRNA *RNA_struct_name_property(StructRNA *type) +PropertyRNA *RNA_struct_name_property(const StructRNA *type) { return type->nameproperty; } @@ -575,6 +576,22 @@ StructRNA *RNA_struct_base(StructRNA *type) return type->base; } +/** + * Use to find the subtype directly below a base-type. + * + * So if type were `RNA_SpotLamp`, `RNA_struct_base_of(type, &RNA_ID)` would return `&RNA_Lamp`. + */ +const StructRNA *RNA_struct_base_child_of(const StructRNA *type, const StructRNA *parent_type) +{ + while (type) { + if (type->base == parent_type) { + return type; + } + type = type->base; + } + return NULL; +} + bool RNA_struct_is_ID(const StructRNA *type) { return (type->flag & STRUCT_ID) != 0; @@ -1882,7 +1899,7 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR * parts of the code that need it still, so we have this exception */ if (prop->flag & PROP_CONTEXT_UPDATE) { if (C) { - if (prop->flag & PROP_CONTEXT_PROPERTY_UPDATE) { + if ((prop->flag & PROP_CONTEXT_PROPERTY_UPDATE) == PROP_CONTEXT_PROPERTY_UPDATE) { ((ContextPropUpdateFunc)prop->update)(C, ptr, prop); } else { @@ -1900,7 +1917,7 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR if (!is_rna || (prop->flag & PROP_IDPROPERTY)) { /* WARNING! This is so property drivers update the display! * not especially nice */ - DAG_id_tag_update(ptr->id.data, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); + DEG_id_tag_update(ptr->id.data, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); WM_main_add_notifier(NC_WINDOW, NULL); /* Not nice as well, but the only way to make sure material preview * is updated with custom nodes. @@ -2848,6 +2865,9 @@ char *RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, int length; BLI_assert(RNA_property_type(prop) == PROP_STRING); + if (!ptr->data) { + return NULL; + } length = RNA_property_string_length(ptr, prop); @@ -6783,6 +6803,13 @@ int RNA_function_call_direct_va_lookup(bContext *C, ReportList *reports, Pointer return 0; } +const char *RNA_translate_ui_text( + const char *text, const char *text_ctxt, StructRNA *type, PropertyRNA *prop, + int translate) +{ + return rna_translate_ui_text(text, text_ctxt, type, prop, translate); +} + bool RNA_property_reset(PointerRNA *ptr, PropertyRNA *prop, int index) { int len; |