From 036f6a3fa8e35ba94c4f3f3e714d79ee2d10f2cc Mon Sep 17 00:00:00 2001 From: kobewi Date: Sun, 3 Jan 2021 17:24:10 +0100 Subject: [PATCH] Commit CanvasItem state only if it changed --- editor/plugins/canvas_item_editor_plugin.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 67b7a2af796..498f9d5c191 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -963,8 +963,23 @@ void CanvasItemEditor::_restore_canvas_item_state(List p_canvas_it } void CanvasItemEditor::_commit_canvas_item_state(List p_canvas_items, String action_name, bool commit_bones) { - undo_redo->create_action(action_name); + List modified_canvas_items; for (List::Element *E = p_canvas_items.front(); E; E = E->next()) { + CanvasItem *canvas_item = E->get(); + Dictionary old_state = editor_selection->get_node_editor_data(canvas_item)->undo_state; + Dictionary new_state = canvas_item->_edit_get_state(); + + if (old_state.hash() != new_state.hash()) { + modified_canvas_items.push_back(canvas_item); + } + } + + if (modified_canvas_items.is_empty()) { + return; + } + + undo_redo->create_action(action_name); + for (List::Element *E = modified_canvas_items.front(); E; E = E->next()) { CanvasItem *canvas_item = E->get(); CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data(canvas_item); undo_redo->add_do_method(canvas_item, "_edit_set_state", canvas_item->_edit_get_state());