Merge branch 'master' into blender2.8
[blender.git] / source / blender / makesrna / intern / rna_ID.c
index c35ca5c42e41db852ba34aa3575d3d4a90522f10..088b2b67af5bacede78ea2d9e8c6439b810d0b07 100644 (file)
@@ -793,6 +793,14 @@ static int rna_ID_is_updated_data_get(PointerRNA *ptr)
        return ((data->recalc & ID_RECALC_ALL) != 0);
 }
 
+static IDProperty *rna_IDPropertyWrapPtr_idprops(PointerRNA *ptr, bool UNUSED(create))
+{
+       if (ptr == NULL) {
+               return NULL;
+       }
+       return ptr->data;
+}
+
 #else
 
 static void rna_def_ID_properties(BlenderRNA *brna)
@@ -1180,6 +1188,20 @@ static void rna_def_library(BlenderRNA *brna)
        RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_CONTEXT);
        RNA_def_function_ui_description(func, "Reload this library and all its linked data-blocks");
 }
+
+/**
+ * \attention This is separate from the above. It allows for RNA functions to
+ * return an IDProperty *. See MovieClip.metadata for a usage example.
+ **/
+static void rna_def_idproperty_wrap_ptr(BlenderRNA *brna)
+{
+       StructRNA *srna;
+
+       srna = RNA_def_struct(brna, "IDPropertyWrapPtr", NULL);
+       RNA_def_struct_idprops_func(srna, "rna_IDPropertyWrapPtr_idprops");
+       RNA_def_struct_flag(srna, STRUCT_NO_DATABLOCK_IDPROPERTIES);
+}
+
 void RNA_def_ID(BlenderRNA *brna)
 {
        StructRNA *srna;
@@ -1198,6 +1220,7 @@ void RNA_def_ID(BlenderRNA *brna)
        rna_def_ID_properties(brna);
        rna_def_ID_materials(brna);
        rna_def_library(brna);
+       rna_def_idproperty_wrap_ptr(brna);
 }
 
 #endif