Fix T62960: Expanding/Closing Constraints/Modifiers causes re-render
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 1 Apr 2019 08:22:06 +0000 (10:22 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Mon, 1 Apr 2019 12:30:42 +0000 (14:30 +0200)
Mark specific properties as no-dependency-graph tag.

This is needed to avoid a centralized Copy-on-Write tag from RNA
pointer update.

13 files changed:
source/blender/makesrna/RNA_types.h
source/blender/makesrna/intern/rna_access.c
source/blender/makesrna/intern/rna_action.c
source/blender/makesrna/intern/rna_boid.c
source/blender/makesrna/intern/rna_camera.c
source/blender/makesrna/intern/rna_constraint.c
source/blender/makesrna/intern/rna_fcurve.c
source/blender/makesrna/intern/rna_gpencil_modifier.c
source/blender/makesrna/intern/rna_modifier.c
source/blender/makesrna/intern/rna_nodetree.c
source/blender/makesrna/intern/rna_sequencer.c
source/blender/makesrna/intern/rna_shader_fx.c
source/blender/makesrna/intern/rna_wm.c

index e713007..49e1444 100644 (file)
@@ -239,6 +239,11 @@ typedef enum PropertyFlag {
        PROP_DYNAMIC                 = (1 << 17), /* for dynamic arrays, and retvals of type string */
        PROP_ENUM_NO_CONTEXT         = (1 << 24), /* for enum that shouldn't be contextual */
        PROP_ENUM_NO_TRANSLATE       = (1 << 29), /* for enums not to be translated (e.g. viewlayers' names in nodes) */
+
+       /* Don't do dependency graph tag from a property update callback.
+        * Use this for properties which defines interface state, for example,
+        * properties which denotes whether modifier panel is collapsed or not. */
+       PROP_NO_DEG_UPDATE           = (1 << 30),
 } PropertyFlag;
 
 /* Flags related to comparing and overriding RNA properties. Make sure enums are updated with these */
index d72e6a5..1d39198 100644 (file)
@@ -2187,7 +2187,7 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR
                        /* we could add NULL check, for now don't */
                        WM_msg_publish_rna(mbus, ptr, prop);
                }
-               if (ptr->id.data != NULL) {
+               if (ptr->id.data != NULL && ((prop->flag & PROP_NO_DEG_UPDATE) == 0)) {
                        const short id_type = GS(((ID *)ptr->id.data)->name);
                        if (ID_TYPE_IS_COW(id_type)) {
                                DEG_id_tag_update(ptr->id.data, ID_RECALC_COPY_ON_WRITE);
index 1a66a12..7d86c42 100644 (file)
@@ -554,6 +554,7 @@ static void rna_def_action_group(BlenderRNA *brna)
        RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
 
        prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", AGRP_EXPANDED);
        RNA_def_property_ui_text(prop, "Expanded", "Action group is expanded");
        RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
index 27e4ee6..9ffc53d 100644 (file)
@@ -442,6 +442,7 @@ static void rna_def_boidrule(BlenderRNA *brna)
        RNA_def_property_update(prop, 0, "rna_Boids_reset");
 
        /*prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE); */
+       /*RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);*/
        /*RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Expanded); */
        /*RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface"); */
 
index 7fc4b34..5f930c1 100644 (file)
@@ -225,6 +225,7 @@ static void rna_def_camera_background_image(BlenderRNA *brna)
        RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
 
        prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_EXPANDED);
        RNA_def_property_ui_text(prop, "Show Expanded", "Show the expanded in the user interface");
        RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
index eae9ca2..16cd103 100644 (file)
@@ -2641,6 +2641,7 @@ void RNA_def_constraint(BlenderRNA *brna)
        RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
 
        prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_EXPAND);
        RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
        RNA_def_property_ui_text(prop, "Expanded", "Constraint's panel is expanded in UI");
index ca4a6d2..4d981fe 100644 (file)
@@ -1405,6 +1405,7 @@ static void rna_def_fmodifier(BlenderRNA *brna)
 
        /* settings */
        prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_EXPANDED);
        RNA_def_property_ui_text(prop, "Expanded", "F-Curve Modifier's panel is expanded in UI");
        RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
index f0be1a2..23be3bb 100644 (file)
@@ -1627,6 +1627,7 @@ void RNA_def_greasepencil_modifier(BlenderRNA *brna)
        RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
 
        prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
        RNA_def_property_boolean_sdna(prop, NULL, "mode", eGpencilModifierMode_Expanded);
        RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
        RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
index a0d37d3..6dca814 100644 (file)
@@ -5119,6 +5119,7 @@ void RNA_def_modifier(BlenderRNA *brna)
        RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
        prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
        RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Expanded);
        RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
        RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
index 7bd3d5e..44cf159 100644 (file)
@@ -7202,6 +7202,7 @@ static void rna_def_node_socket(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Linked", "True if the socket is connected");
 
        prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
        RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SOCK_COLLAPSED);
        RNA_def_property_ui_text(prop, "Expanded", "Socket links are expanded in the user interface");
        RNA_def_property_update(prop, NC_NODE | NA_EDITED, NULL);
index c01f595..569fbb6 100644 (file)
@@ -2608,6 +2608,7 @@ static void rna_def_modifier(BlenderRNA *brna)
        RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceModifier_update");
 
        prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQUENCE_MODIFIER_EXPANDED);
        RNA_def_property_ui_text(prop, "Expanded", "Mute expanded settings for the modifier");
        RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
index 78a21b7..41e87f6 100644 (file)
@@ -683,6 +683,7 @@ void RNA_def_shader_fx(BlenderRNA *brna)
        RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
 
        prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
        RNA_def_property_boolean_sdna(prop, NULL, "mode", eShaderFxMode_Expanded);
        RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
        RNA_def_property_ui_text(prop, "Expanded", "Set effect expanded in the user interface");
index 55a18b4..d94349d 100644 (file)
@@ -2534,6 +2534,7 @@ static void rna_def_keyconfig(BlenderRNA *brna)
        RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
 
        prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", KMI_EXPANDED);
        RNA_def_property_ui_text(prop, "Expanded", "Show key map event and property details in the user interface");
        RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);