RNA: add fallback update function
authorCampbell Barton <ideasman42@gmail.com>
Wed, 22 May 2019 14:29:31 +0000 (00:29 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 22 May 2019 14:35:37 +0000 (00:35 +1000)
Use so we can have a default update function,
that doesn't need to be set for every property.

source/blender/makesrna/RNA_define.h
source/blender/makesrna/intern/rna_define.c
source/blender/makesrna/intern/rna_internal.h

index 59c03cf..0beb146 100644 (file)
@@ -48,6 +48,7 @@ void RNA_define_free(BlenderRNA *brna);
 void RNA_free(BlenderRNA *brna);
 void RNA_define_verify_sdna(bool verify);
 void RNA_define_animate_sdna(bool animate);
+void RNA_define_fallback_property_update(int noteflag, const char *updatefunc);
 
 void RNA_init(void);
 void RNA_exit(void);
index 8e24e9a..b1818ca 100644 (file)
@@ -709,6 +709,14 @@ void RNA_define_animate_sdna(bool animate)
 }
 #endif
 
+#ifndef RNA_RUNTIME
+void RNA_define_fallback_property_update(int noteflag, const char *updatefunc)
+{
+  DefRNA.fallback.property_update.noteflag = noteflag;
+  DefRNA.fallback.property_update.updatefunc = updatefunc;
+}
+#endif
+
 void RNA_struct_free_extension(StructRNA *srna, ExtensionRNA *ext)
 {
 #ifdef RNA_RUNTIME
@@ -1413,6 +1421,12 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_,
   }
   /* TODO: do we want that for runtime-defined stuff too? I’d say no, but... maybe yes :/ */
 
+#ifndef RNA_RUNTIME
+  /* Both are typically cleared. */
+  RNA_def_property_update(
+      prop, DefRNA.fallback.property_update.noteflag, DefRNA.fallback.property_update.updatefunc);
+#endif
+
   rna_addtail(&cont->properties, prop);
 
   return prop;
index 1612539..0ced20d 100644 (file)
@@ -116,6 +116,16 @@ typedef struct BlenderDefRNA {
   ListBase allocs;
   struct StructRNA *laststruct;
   int error, silent, preprocess, verify, animate;
+  /* Keep last. */
+#ifndef RNA_RUNTIME
+  struct {
+    /** #RNA_def_property_update */
+    struct {
+      int noteflag;
+      const char *updatefunc;
+    } property_update;
+  } fallback;
+#endif
 } BlenderDefRNA;
 
 extern BlenderDefRNA DefRNA;