diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-03-06 09:50:13 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-03-06 09:50:13 +0100 |
commit | d082ce908fef1b1e994e9b0416dad0ab5cd5ef21 (patch) | |
tree | af07d0db4118dc01263dd6b7ed50e9a5685e3602 /core | |
parent | 0acc4276b6825d872648fddfbd74c00c63d36741 (diff) | |
parent | f249667dc8d490d25624122d8a05e229af61ef62 (diff) | |
download | redot-engine-d082ce908fef1b1e994e9b0416dad0ab5cd5ef21.tar.gz |
Merge pull request #85390 from TheSofox/merge-all-commit-fix
UndoRedo: Fix `MERGE_ALL` commit from repeating actions
Diffstat (limited to 'core')
-rw-r--r-- | core/object/undo_redo.cpp | 16 | ||||
-rw-r--r-- | core/object/undo_redo.h | 1 |
2 files changed, 16 insertions, 1 deletions
diff --git a/core/object/undo_redo.cpp b/core/object/undo_redo.cpp index 569e6ae19f..6a1385e268 100644 --- a/core/object/undo_redo.cpp +++ b/core/object/undo_redo.cpp @@ -71,7 +71,14 @@ bool UndoRedo::_redo(bool p_execute) { } current_action++; - _process_operation_list(actions.write[current_action].do_ops.front(), p_execute); + + List<Operation>::Element *start_doops_element = actions.write[current_action].do_ops.front(); + while (merge_total > 0 && start_doops_element) { + start_doops_element = start_doops_element->next(); + merge_total--; + } + + _process_operation_list(start_doops_element, p_execute); version++; emit_signal(SNAME("version_changed")); @@ -104,6 +111,12 @@ void UndoRedo::create_action(const String &p_name, MergeMode p_mode, bool p_back } } + if (p_mode == MERGE_ALL) { + merge_total = actions.write[current_action + 1].do_ops.size(); + } else { + merge_total = 0; + } + actions.write[actions.size() - 1].last_tick = ticks; // Revert reverse from previous commit. @@ -121,6 +134,7 @@ void UndoRedo::create_action(const String &p_name, MergeMode p_mode, bool p_back actions.push_back(new_action); merge_mode = MERGE_DISABLE; + merge_total = 0; } } diff --git a/core/object/undo_redo.h b/core/object/undo_redo.h index 62aebff877..19d178635c 100644 --- a/core/object/undo_redo.h +++ b/core/object/undo_redo.h @@ -84,6 +84,7 @@ private: MergeMode merge_mode = MERGE_DISABLE; bool merging = false; uint64_t version = 1; + int merge_total = 0; void _pop_history_tail(); void _process_operation_list(List<Operation>::Element *E, bool p_execute); |