diff options
-rw-r--r-- | source/blender/blenkernel/BKE_undo_system.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/undo_system.c | 4 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_curve_undo.c | 1 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt_undo.c | 3 | ||||
-rw-r--r-- | source/blender/editors/space_image/image_undo.c | 1 | ||||
-rw-r--r-- | source/blender/editors/undo/ed_undo.c | 2 |
6 files changed, 10 insertions, 3 deletions
diff --git a/source/blender/blenkernel/BKE_undo_system.h b/source/blender/blenkernel/BKE_undo_system.h index 4870b19fe1d..f462a7fab71 100644 --- a/source/blender/blenkernel/BKE_undo_system.h +++ b/source/blender/blenkernel/BKE_undo_system.h @@ -152,6 +152,8 @@ void BKE_undosys_stack_init_from_context(UndoStack *ustack, struct bContext *C); UndoStep *BKE_undosys_stack_active_with_type(UndoStack *ustack, const UndoType *ut); UndoStep *BKE_undosys_stack_init_or_active_with_type(UndoStack *ustack, const UndoType *ut); void BKE_undosys_stack_limit_steps_and_memory(UndoStack *ustack, int steps, size_t memory_limit); +#define BKE_undosys_stack_limit_steps_and_memory_defaults(ustack) \ + BKE_undosys_stack_limit_steps_and_memory(ustack, U.undosteps, (size_t)U.undomemory * 1024 * 1024) /* Only some UndoType's require init. */ UndoStep *BKE_undosys_step_push_init_with_type(UndoStack *ustack, diff --git a/source/blender/blenkernel/intern/undo_system.c b/source/blender/blenkernel/intern/undo_system.c index 33a457386e8..e155dedeef0 100644 --- a/source/blender/blenkernel/intern/undo_system.c +++ b/source/blender/blenkernel/intern/undo_system.c @@ -399,7 +399,7 @@ UndoStep *BKE_undosys_stack_init_or_active_with_type(UndoStack *ustack, const Un void BKE_undosys_stack_limit_steps_and_memory(UndoStack *ustack, int steps, size_t memory_limit) { UNDO_NESTED_ASSERT(false); - if (!(steps || memory_limit)) { + if ((steps == -1) && (memory_limit != 0)) { return; } @@ -416,7 +416,7 @@ void BKE_undosys_stack_limit_steps_and_memory(UndoStack *ustack, int steps, size break; } } - if (steps) { + if (steps != -1) { if (us_count == steps) { break; } diff --git a/source/blender/editors/sculpt_paint/paint_curve_undo.c b/source/blender/editors/sculpt_paint/paint_curve_undo.c index 5797eb68dd3..a3daef19f11 100644 --- a/source/blender/editors/sculpt_paint/paint_curve_undo.c +++ b/source/blender/editors/sculpt_paint/paint_curve_undo.c @@ -179,6 +179,7 @@ void ED_paintcurve_undo_push_end(void) { UndoStack *ustack = ED_undo_stack_get(); BKE_undosys_step_push(ustack, NULL, NULL); + BKE_undosys_stack_limit_steps_and_memory_defaults(ustack); WM_file_tag_modified(); } diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c index 905d0e0a4bf..912a6e1aaf6 100644 --- a/source/blender/editors/sculpt_paint/sculpt_undo.c +++ b/source/blender/editors/sculpt_paint/sculpt_undo.c @@ -1332,6 +1332,9 @@ void SCULPT_undo_push_end_ex(const bool use_nested_undo) if (wm->op_undo_depth == 0 || use_nested_undo) { UndoStack *ustack = ED_undo_stack_get(); BKE_undosys_step_push(ustack, NULL, NULL); + if (wm->op_undo_depth == 0) { + BKE_undosys_stack_limit_steps_and_memory_defaults(ustack); + } WM_file_tag_modified(); } } diff --git a/source/blender/editors/space_image/image_undo.c b/source/blender/editors/space_image/image_undo.c index cebf47a385d..eb1c46240cb 100644 --- a/source/blender/editors/space_image/image_undo.c +++ b/source/blender/editors/space_image/image_undo.c @@ -1083,6 +1083,7 @@ void ED_image_undo_push_end(void) { UndoStack *ustack = ED_undo_stack_get(); BKE_undosys_step_push(ustack, NULL, NULL); + BKE_undosys_stack_limit_steps_and_memory_defaults(ustack); WM_file_tag_modified(); } diff --git a/source/blender/editors/undo/ed_undo.c b/source/blender/editors/undo/ed_undo.c index 69e7c04b5e5..f7300221028 100644 --- a/source/blender/editors/undo/ed_undo.c +++ b/source/blender/editors/undo/ed_undo.c @@ -97,7 +97,7 @@ void ED_undo_push(bContext *C, const char *str) if (U.undomemory != 0) { const size_t memory_limit = (size_t)U.undomemory * 1024 * 1024; - BKE_undosys_stack_limit_steps_and_memory(wm->undo_stack, 0, memory_limit); + BKE_undosys_stack_limit_steps_and_memory(wm->undo_stack, -1, memory_limit); } if (CLOG_CHECK(&LOG, 1)) { |