Undo System: add is_final argument (no functional changes)
This is needed step out of undo steps which accumulate changes, larger changes could be made to handle this but better not make them at this point.
This commit is contained in:
@@ -106,7 +106,8 @@ typedef struct UndoType {
|
||||
void (*step_encode_init)(struct bContext *C, UndoStep *us);
|
||||
|
||||
bool (*step_encode)(struct bContext *C, struct Main *bmain, UndoStep *us);
|
||||
void (*step_decode)(struct bContext *C, struct Main *bmain, UndoStep *us, int dir);
|
||||
void (*step_decode)(
|
||||
struct bContext *C, struct Main *bmain, UndoStep *us, int dir, bool is_final);
|
||||
|
||||
/**
|
||||
* \note When freeing all steps,
|
||||
|
||||
@@ -173,7 +173,8 @@ static bool undosys_step_encode(bContext *C, Main *bmain, UndoStack *ustack, Und
|
||||
return ok;
|
||||
}
|
||||
|
||||
static void undosys_step_decode(bContext *C, Main *bmain, UndoStack *ustack, UndoStep *us, int dir)
|
||||
static void undosys_step_decode(
|
||||
bContext *C, Main *bmain, UndoStack *ustack, UndoStep *us, int dir, bool is_final)
|
||||
{
|
||||
CLOG_INFO(&LOG, 2, "addr=%p, name='%s', type='%s'", us, us->name, us->type->name);
|
||||
|
||||
@@ -188,7 +189,7 @@ static void undosys_step_decode(bContext *C, Main *bmain, UndoStack *ustack, Und
|
||||
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, bmain, ustack, us_iter, dir);
|
||||
undosys_step_decode(C, bmain, ustack, us_iter, dir, false);
|
||||
/* May have been freed on memfile read. */
|
||||
bmain = G.main;
|
||||
}
|
||||
@@ -203,7 +204,7 @@ static void undosys_step_decode(bContext *C, Main *bmain, UndoStack *ustack, Und
|
||||
}
|
||||
|
||||
UNDO_NESTED_CHECK_BEGIN;
|
||||
us->type->step_decode(C, bmain, us, dir);
|
||||
us->type->step_decode(C, bmain, us, dir, is_final);
|
||||
UNDO_NESTED_CHECK_END;
|
||||
|
||||
#ifdef WITH_GLOBAL_UNDO_CORRECT_ORDER
|
||||
@@ -678,7 +679,8 @@ bool BKE_undosys_step_undo_with_data_ex(UndoStack *ustack,
|
||||
* - skip successive steps that store the same data, eg: memfile steps.
|
||||
* - or steps that include another steps data, eg: a memfile step includes text undo data.
|
||||
*/
|
||||
undosys_step_decode(C, G_MAIN, ustack, us_iter, -1);
|
||||
undosys_step_decode(C, G_MAIN, ustack, us_iter, -1, false);
|
||||
|
||||
us_iter = us_iter->prev;
|
||||
}
|
||||
}
|
||||
@@ -702,7 +704,7 @@ bool BKE_undosys_step_undo_with_data_ex(UndoStack *ustack,
|
||||
us_iter->name,
|
||||
us_iter->type->name);
|
||||
}
|
||||
undosys_step_decode(C, G_MAIN, ustack, us_iter, -1);
|
||||
undosys_step_decode(C, G_MAIN, ustack, us_iter, -1, is_final);
|
||||
ustack->step_active = us_iter;
|
||||
} while ((us_active != us_iter) && (us_iter = us_iter->prev));
|
||||
}
|
||||
@@ -745,7 +747,7 @@ bool BKE_undosys_step_redo_with_data_ex(UndoStack *ustack,
|
||||
if (ustack->step_active && ustack->step_active->next) {
|
||||
UndoStep *us_iter = ustack->step_active->next;
|
||||
while (us_iter != us) {
|
||||
undosys_step_decode(C, G_MAIN, ustack, us_iter, 1);
|
||||
undosys_step_decode(C, G_MAIN, ustack, us_iter, 1, false);
|
||||
us_iter = us_iter->next;
|
||||
}
|
||||
}
|
||||
@@ -769,7 +771,7 @@ bool BKE_undosys_step_redo_with_data_ex(UndoStack *ustack,
|
||||
us_iter->name,
|
||||
us_iter->type->name);
|
||||
}
|
||||
undosys_step_decode(C, G_MAIN, ustack, us_iter, 1);
|
||||
undosys_step_decode(C, G_MAIN, ustack, us_iter, 1, is_final);
|
||||
ustack->step_active = us_iter;
|
||||
} while ((us_active != us_iter) && (us_iter = us_iter->next));
|
||||
}
|
||||
|
||||
@@ -174,7 +174,8 @@ static bool armature_undosys_step_encode(struct bContext *C,
|
||||
static void armature_undosys_step_decode(struct bContext *C,
|
||||
struct Main *UNUSED(bmain),
|
||||
UndoStep *us_p,
|
||||
int UNUSED(dir))
|
||||
int UNUSED(dir),
|
||||
bool UNUSED(is_final))
|
||||
{
|
||||
ArmatureUndoStep *us = (ArmatureUndoStep *)us_p;
|
||||
|
||||
|
||||
@@ -238,10 +238,8 @@ static bool curve_undosys_step_encode(struct bContext *C,
|
||||
return true;
|
||||
}
|
||||
|
||||
static void curve_undosys_step_decode(struct bContext *C,
|
||||
struct Main *bmain,
|
||||
UndoStep *us_p,
|
||||
int UNUSED(dir))
|
||||
static void curve_undosys_step_decode(
|
||||
struct bContext *C, struct Main *bmain, UndoStep *us_p, int UNUSED(dir), bool UNUSED(is_final))
|
||||
{
|
||||
CurveUndoStep *us = (CurveUndoStep *)us_p;
|
||||
|
||||
|
||||
@@ -356,7 +356,8 @@ static bool font_undosys_step_encode(struct bContext *C,
|
||||
static void font_undosys_step_decode(struct bContext *C,
|
||||
struct Main *UNUSED(bmain),
|
||||
UndoStep *us_p,
|
||||
int UNUSED(dir))
|
||||
int UNUSED(dir),
|
||||
bool UNUSED(is_final))
|
||||
{
|
||||
/* TODO(campbell): undo_system: use low-level API to set mode. */
|
||||
ED_object_mode_set(C, OB_MODE_EDIT);
|
||||
|
||||
@@ -176,7 +176,8 @@ static bool lattice_undosys_step_encode(struct bContext *C,
|
||||
static void lattice_undosys_step_decode(struct bContext *C,
|
||||
struct Main *UNUSED(bmain),
|
||||
UndoStep *us_p,
|
||||
int UNUSED(dir))
|
||||
int UNUSED(dir),
|
||||
bool UNUSED(is_final))
|
||||
{
|
||||
LatticeUndoStep *us = (LatticeUndoStep *)us_p;
|
||||
|
||||
|
||||
@@ -741,7 +741,8 @@ static bool mesh_undosys_step_encode(struct bContext *C,
|
||||
static void mesh_undosys_step_decode(struct bContext *C,
|
||||
struct Main *UNUSED(bmain),
|
||||
UndoStep *us_p,
|
||||
int UNUSED(dir))
|
||||
int UNUSED(dir),
|
||||
bool UNUSED(is_final))
|
||||
{
|
||||
MeshUndoStep *us = (MeshUndoStep *)us_p;
|
||||
|
||||
|
||||
@@ -185,7 +185,8 @@ static bool mball_undosys_step_encode(struct bContext *C,
|
||||
static void mball_undosys_step_decode(struct bContext *C,
|
||||
struct Main *UNUSED(bmain),
|
||||
UndoStep *us_p,
|
||||
int UNUSED(dir))
|
||||
int UNUSED(dir),
|
||||
bool UNUSED(is_final))
|
||||
{
|
||||
MBallUndoStep *us = (MBallUndoStep *)us_p;
|
||||
|
||||
|
||||
@@ -252,7 +252,8 @@ static bool particle_undosys_step_encode(struct bContext *C,
|
||||
static void particle_undosys_step_decode(struct bContext *C,
|
||||
struct Main *UNUSED(bmain),
|
||||
UndoStep *us_p,
|
||||
int UNUSED(dir))
|
||||
int UNUSED(dir),
|
||||
bool UNUSED(is_final))
|
||||
{
|
||||
/* TODO(campbell): undo_system: use low-level API to set mode. */
|
||||
ED_object_mode_set(C, OB_MODE_PARTICLE_EDIT);
|
||||
|
||||
@@ -122,7 +122,8 @@ static bool paintcurve_undosys_step_encode(struct bContext *C,
|
||||
static void paintcurve_undosys_step_decode(struct bContext *UNUSED(C),
|
||||
struct Main *UNUSED(bmain),
|
||||
UndoStep *us_p,
|
||||
int UNUSED(dir))
|
||||
int UNUSED(dir),
|
||||
bool UNUSED(is_final))
|
||||
{
|
||||
PaintCurveUndoStep *us = (PaintCurveUndoStep *)us_p;
|
||||
undocurve_to_paintcurve(&us->data, us->pc);
|
||||
|
||||
@@ -540,10 +540,8 @@ static void image_undosys_step_decode_redo(ImageUndoStep *us)
|
||||
}
|
||||
}
|
||||
|
||||
static void image_undosys_step_decode(struct bContext *C,
|
||||
struct Main *bmain,
|
||||
UndoStep *us_p,
|
||||
int dir)
|
||||
static void image_undosys_step_decode(
|
||||
struct bContext *C, struct Main *bmain, UndoStep *us_p, int dir, bool UNUSED(is_final))
|
||||
{
|
||||
ImageUndoStep *us = (ImageUndoStep *)us_p;
|
||||
#if 0
|
||||
|
||||
@@ -1109,10 +1109,8 @@ static void sculpt_undosys_step_decode_redo(struct bContext *C, SculptUndoStep *
|
||||
}
|
||||
}
|
||||
|
||||
static void sculpt_undosys_step_decode(struct bContext *C,
|
||||
struct Main *bmain,
|
||||
UndoStep *us_p,
|
||||
int dir)
|
||||
static void sculpt_undosys_step_decode(
|
||||
struct bContext *C, struct Main *bmain, UndoStep *us_p, int dir, bool UNUSED(is_final))
|
||||
{
|
||||
/* Ensure sculpt mode. */
|
||||
{
|
||||
|
||||
@@ -175,10 +175,8 @@ static void text_undosys_step_decode_redo(TextUndoStep *us)
|
||||
}
|
||||
}
|
||||
|
||||
static void text_undosys_step_decode(struct bContext *C,
|
||||
struct Main *UNUSED(bmain),
|
||||
UndoStep *us_p,
|
||||
int dir)
|
||||
static void text_undosys_step_decode(
|
||||
struct bContext *C, struct Main *UNUSED(bmain), UndoStep *us_p, int dir, bool UNUSED(is_final))
|
||||
{
|
||||
TextUndoStep *us = (TextUndoStep *)us_p;
|
||||
|
||||
|
||||
@@ -83,10 +83,8 @@ static bool memfile_undosys_step_encode(struct bContext *UNUSED(C),
|
||||
return true;
|
||||
}
|
||||
|
||||
static void memfile_undosys_step_decode(struct bContext *C,
|
||||
struct Main *bmain,
|
||||
UndoStep *us_p,
|
||||
int UNUSED(dir))
|
||||
static void memfile_undosys_step_decode(
|
||||
struct bContext *C, struct Main *bmain, UndoStep *us_p, int UNUSED(dir), bool UNUSED(is_final))
|
||||
{
|
||||
ED_editors_exit(bmain, false);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user