Commit: 51bba03b319319d59f739673c3fafb71bc308e0d
Author: Campbell Barton
Date:   Thu Jan 31 11:34:57 2019 +1100
Branches: master
https://developer.blender.org/rB51bba03b319319d59f739673c3fafb71bc308e0d

Undo System: add Main argument to encode/decode

Needed since we don't always have the context,
and avoids adding G_MAIN into undo callbacks.

===================================================================

M       source/blender/blenkernel/BKE_undo_system.h
M       source/blender/blenkernel/intern/undo_system.c
M       source/blender/editors/armature/editarmature_undo.c
M       source/blender/editors/curve/editcurve_undo.c
M       source/blender/editors/curve/editfont_undo.c
M       source/blender/editors/lattice/editlattice_undo.c
M       source/blender/editors/mesh/editmesh_undo.c
M       source/blender/editors/metaball/editmball_undo.c
M       source/blender/editors/physics/particle_edit_undo.c
M       source/blender/editors/sculpt_paint/paint_curve_undo.c
M       source/blender/editors/sculpt_paint/paint_image_undo.c
M       source/blender/editors/sculpt_paint/sculpt_undo.c
M       source/blender/editors/space_text/text_undo.c
M       source/blender/editors/undo/memfile_undo.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_undo_system.h 
b/source/blender/blenkernel/BKE_undo_system.h
index 2863642a3e0..33eefcf6085 100644
--- a/source/blender/blenkernel/BKE_undo_system.h
+++ b/source/blender/blenkernel/BKE_undo_system.h
@@ -29,6 +29,7 @@ struct UndoStep;
 struct bContext;
 
 /* ID's */
+struct Main;
 struct Mesh;
 struct Object;
 struct Scene;
@@ -115,8 +116,8 @@ typedef struct UndoType {
         */
        void (*step_encode_init)(struct bContext *C, UndoStep *us);
 
-       bool (*step_encode)(struct bContext *C, UndoStep *us);
-       void (*step_decode)(struct bContext *C, UndoStep *us, int dir);
+       bool (*step_encode)(struct bContext *C, struct Main *bmain, UndoStep 
*us);
+       void (*step_decode)(struct bContext *C, struct Main *bmain, UndoStep 
*us, int dir);
 
        /**
         * \note When freeing all steps,
diff --git a/source/blender/blenkernel/intern/undo_system.c 
b/source/blender/blenkernel/intern/undo_system.c
index d16f0569a57..ab375da0925 100644
--- a/source/blender/blenkernel/intern/undo_system.c
+++ b/source/blender/blenkernel/intern/undo_system.c
@@ -146,16 +146,15 @@ static void undosys_id_ref_resolve(void *user_data, 
UndoRefID *id_ref)
        }
 }
 
-static bool undosys_step_encode(bContext *C, UndoStack *ustack, UndoStep *us)
+static bool undosys_step_encode(bContext *C, Main *bmain, UndoStack *ustack, 
UndoStep *us)
 {
        CLOG_INFO(&LOG, 2, "addr=%p, name='%s', type='%s'", us, us->name, 
us->type->name);
        UNDO_NESTED_CHECK_BEGIN;
-       bool ok = us->type->step_encode(C, us);
+       bool ok = us->type->step_encode(C, bmain, us);
        UNDO_NESTED_CHECK_END;
        if (ok) {
                if (us->type->step_foreach_ID_ref != NULL) {
                        /* Don't use from context yet because sometimes context 
is fake and not all members are filled in. */
-                       Main *bmain = G.main;
                        us->type->step_foreach_ID_ref(us, undosys_id_ref_store, 
bmain);
                }
 #ifdef WITH_GLOBAL_UNDO_CORRECT_ORDER
@@ -170,7 +169,7 @@ static bool undosys_step_encode(bContext *C, UndoStack 
*ustack, UndoStep *us)
        return ok;
 }
 
-static void undosys_step_decode(bContext *C, UndoStack *ustack, UndoStep *us, 
int dir)
+static void undosys_step_decode(bContext *C, Main *bmain, UndoStack *ustack, 
UndoStep *us, int dir)
 {
        CLOG_INFO(&LOG, 2, "addr=%p, name='%s', type='%s'", us, us->name, 
us->type->name);
 
@@ -185,7 +184,7 @@ static void undosys_step_decode(bContext *C, UndoStack 
*ustack, UndoStep *us, in
                                        else {
                                                /* Load the previous memfile 
state so any ID's referenced in this
                                                 * undo step will be correctly 
resolved, see: T56163. */
-                                               undosys_step_decode(C, ustack, 
us_iter, dir);
+                                               undosys_step_decode(C, bmain, 
ustack, us_iter, dir);
                                        }
                                        break;
                                }
@@ -193,12 +192,11 @@ static void undosys_step_decode(bContext *C, UndoStack 
*ustack, UndoStep *us, in
                }
 #endif
                /* Don't use from context yet because sometimes context is fake 
and not all members are filled in. */
-               Main *bmain = G.main;
                us->type->step_foreach_ID_ref(us, undosys_id_ref_resolve, 
bmain);
        }
 
        UNDO_NESTED_CHECK_BEGIN;
-       us->type->step_decode(C, us, dir);
+       us->type->step_decode(C, bmain, us, dir);
        UNDO_NESTED_CHECK_END;
 
 #ifdef WITH_GLOBAL_UNDO_CORRECT_ORDER
@@ -487,6 +485,7 @@ UndoStep *BKE_undosys_step_push_init(UndoStack *ustack, 
bContext *C, const char
  */
 bool BKE_undosys_step_push_with_type(UndoStack *ustack, bContext *C, const 
char *name, const UndoType *ut)
 {
+       Main *bmain = G.main;
        UNDO_NESTED_ASSERT(false);
        undosys_stack_validate(ustack, false);
        bool is_not_empty = ustack->step_active != NULL;
@@ -510,7 +509,6 @@ bool BKE_undosys_step_push_with_type(UndoStack *ustack, 
bContext *C, const char
 
 #ifdef WITH_GLOBAL_UNDO_ENSURE_UPDATED
        if (ut->step_foreach_ID_ref != NULL) {
-               Main *bmain = G.main;
                if (bmain->is_memfile_undo_written == false) {
                        const char *name_internal = "MemFile Internal (pre)";
                        /* Don't let 'step_init' cause issues when adding 
memfile undo step. */
@@ -541,7 +539,7 @@ bool BKE_undosys_step_push_with_type(UndoStack *ustack, 
bContext *C, const char
                us->type = ut;
                /* initialized, not added yet. */
 
-               if (!undosys_step_encode(C, ustack, us)) {
+               if (!undosys_step_encode(C, bmain, ustack, us)) {
                        MEM_freeN(us);
                        undosys_stack_validate(ustack, true);
                        return false;
@@ -552,7 +550,6 @@ bool BKE_undosys_step_push_with_type(UndoStack *ustack, 
bContext *C, const char
        }
 
        if (use_memfile_step) {
-               Main *bmain = G.main;
                const char *name_internal = "MemFile Internal (post)";
                const bool ok = undosys_stack_push_main(ustack, name_internal, 
bmain);
                if (ok) {
@@ -647,6 +644,7 @@ bool BKE_undosys_step_undo_with_data_ex(
         bool use_skip)
 {
        UNDO_NESTED_ASSERT(false);
+       Main *bmain = G.main;
        if (us) {
                undosys_stack_validate(ustack, true);
        }
@@ -664,14 +662,14 @@ bool BKE_undosys_step_undo_with_data_ex(
                        UndoStep *us_iter = ustack->step_active;
                        while (us_iter != us) {
                                if (us_iter->type->mode == 
BKE_UNDOTYPE_MODE_ACCUMULATE) {
-                                       undosys_step_decode(C, ustack, us_iter, 
-1);
+                                       undosys_step_decode(C, bmain, ustack, 
us_iter, -1);
                                }
                                us_iter = us_iter->prev;
                        }
                }
 
                if (us->type->mode != BKE_UNDOTYPE_MODE_ACCUMULATE) {
-                       undosys_step_decode(C, ustack, us, -1);
+                       undosys_step_decode(C, bmain, ustack, us, -1);
                }
                ustack->step_active = us_prev;
                undosys_stack_validate(ustack, true);
@@ -706,6 +704,7 @@ bool BKE_undosys_step_redo_with_data_ex(
         UndoStack *ustack, bContext *C, UndoStep *us,
         bool use_skip)
 {
+       Main *bmain = G.main;
        UNDO_NESTED_ASSERT(false);
        UndoStep *us_next = us ? us->next : NULL;
        /* Unlike undo accumulate, we always use the next. */
@@ -719,14 +718,14 @@ bool BKE_undosys_step_redo_with_data_ex(
                        UndoStep *us_iter = ustack->step_active->next;
                        while (us_iter != us) {
                                if (us_iter->type->mode == 
BKE_UNDOTYPE_MODE_ACCUMULATE) {
-                                       undosys_step_decode(C, ustack, us_iter, 
1);
+                                       undosys_step_decode(C, bmain, ustack, 
us_iter, 1);
                                }
                                us_iter = us_iter->next;
                        }
                }
 
                /* Unlike undo, always redo accumulation state. */
-               undosys_step_decode(C, ustack, us, 1);
+               undosys_step_decode(C, bmain, ustack, us, 1);
                ustack->step_active = us_next;
                if (use_skip) {
                        if (ustack->step_active && ustack->step_active->skip) {
diff --git a/source/blender/editors/armature/editarmature_undo.c 
b/source/blender/editors/armature/editarmature_undo.c
index 3119c303801..9cd96db7bdf 100644
--- a/source/blender/editors/armature/editarmature_undo.c
+++ b/source/blender/editors/armature/editarmature_undo.c
@@ -149,7 +149,7 @@ static bool armature_undosys_poll(bContext *C)
        return editarm_object_from_context(C) != NULL;
 }
 
-static bool armature_undosys_step_encode(struct bContext *C, UndoStep *us_p)
+static bool armature_undosys_step_encode(struct bContext *C, struct Main 
*UNUSED(bmain), UndoStep *us_p)
 {
        ArmatureUndoStep *us = (ArmatureUndoStep *)us_p;
 
@@ -173,7 +173,7 @@ static bool armature_undosys_step_encode(struct bContext 
*C, UndoStep *us_p)
        return true;
 }
 
-static void armature_undosys_step_decode(struct bContext *C, UndoStep *us_p, 
int UNUSED(dir))
+static void armature_undosys_step_decode(struct bContext *C, struct Main 
*UNUSED(bmain), UndoStep *us_p, int UNUSED(dir))
 {
        /* TODO(campbell): undo_system: use low-level API to set mode. */
        ED_object_mode_set(C, OB_MODE_EDIT);
diff --git a/source/blender/editors/curve/editcurve_undo.c 
b/source/blender/editors/curve/editcurve_undo.c
index 9163272fbf2..282b3722d3b 100644
--- a/source/blender/editors/curve/editcurve_undo.c
+++ b/source/blender/editors/curve/editcurve_undo.c
@@ -214,7 +214,7 @@ static bool curve_undosys_poll(bContext *C)
        return (obedit != NULL);
 }
 
-static bool curve_undosys_step_encode(struct bContext *C, UndoStep *us_p)
+static bool curve_undosys_step_encode(struct bContext *C, struct Main 
*UNUSED(bmain), UndoStep *us_p)
 {
        CurveUndoStep *us = (CurveUndoStep *)us_p;
 
@@ -237,7 +237,7 @@ static bool curve_undosys_step_encode(struct bContext *C, 
UndoStep *us_p)
        return true;
 }
 
-static void curve_undosys_step_decode(struct bContext *C, UndoStep *us_p, int 
UNUSED(dir))
+static void curve_undosys_step_decode(struct bContext *C, struct Main 
*UNUSED(bmain), UndoStep *us_p, int UNUSED(dir))
 {
        /* TODO(campbell): undo_system: use low-level API to set mode. */
        ED_object_mode_set(C, OB_MODE_EDIT);
diff --git a/source/blender/editors/curve/editfont_undo.c 
b/source/blender/editors/curve/editfont_undo.c
index 85e361b495f..ab6ef4b4728 100644
--- a/source/blender/editors/curve/editfont_undo.c
+++ b/source/blender/editors/curve/editfont_undo.c
@@ -339,7 +339,7 @@ static bool font_undosys_poll(bContext *C)
        return editfont_object_from_context(C) != NULL;
 }
 
-static bool font_undosys_step_encode(struct bContext *C, UndoStep *us_p)
+static bool font_undosys_step_encode(struct bContext *C, struct Main 
*UNUSED(bmain), UndoStep *us_p)
 {
        FontUndoStep *us = (FontUndoStep *)us_p;
        us->obedit_ref.ptr = editfont_object_from_context(C);
@@ -349,7 +349,7 @@ static bool font_undosys_step_encode(struct bContext *C, 
UndoStep *us_p)
        return true;
 }
 
-static void font_undosys_step_decode(struct bContext *C, UndoStep *us_p, int 
UNUSED(dir))
+static void font_undosys_step_decode(struct bContext *C, struct Main 
*UNUSED(bmain), UndoStep *us_p, int UNUSED(dir))
 {
        /* TODO(campbell): undo_system: use low-level API to set mode. */
        ED_object_mode_set(C, OB_MODE_EDIT);
diff --git a/source/blender/editors/lattice/editlattice_undo.c 
b/source/blender/editors/lattice/editlattice_undo.c
index 744f353f129..7ca28906861 100644
--- a/source/blender/editors/lattice/editlattice_undo.c
+++ b/source/blender/editors/lattice/editlattice_undo.c
@@ -151,7 +151,7 @@ static bool lattice_undosys_poll(bContext *C)
        return editlatt_object_from_context(C) != NULL;
 }
 
-static bool lattice_undosys_step_encode(struct bContext *C, UndoStep *us_p)
+static bool lattice_undosys_step_encode(struct bContext *C, struct Main 
*UNUSED(bmain), UndoStep *us_p)
 {
        LatticeUndoStep *us = (LatticeUndoStep *)us_p;
 
@@ -175,7 +175,7 @@ static bool lattice_undosys_step_encode(struct bContext *C, 
UndoStep *us_p)
        return true;
 }
 
-static void lattice_undosys_step_decode(struct bContext *C, UndoStep *us_p, 
int UNUSED(d

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to