From 4cadfd3eb98bd5e70629426acda2d219ea7b53ec Mon Sep 17 00:00:00 2001 From: MewPurPur Date: Sun, 1 Dec 2024 17:03:07 +0200 Subject: [PATCH] Don't create an UndoRedo action if Autoload order doesn't change after Drag & Drop --- editor/editor_autoload_settings.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp index 0a54392aea41..ae47eb075815 100644 --- a/editor/editor_autoload_settings.cpp +++ b/editor/editor_autoload_settings.cpp @@ -715,6 +715,15 @@ void EditorAutoloadSettings::drop_data_fw(const Point2 &p_point, const Variant & Dictionary drop_data = p_data; PackedStringArray autoloads = drop_data["autoloads"]; + // Store the initial order of the autoloads for comparison. + Vector initial_orders; + initial_orders.resize(autoload_cache.size()); + int idx = 0; + for (const AutoloadInfo &F : autoload_cache) { + initial_orders.write[idx++] = F.order; + } + + // Perform the drag-and-drop operation. Vector orders; orders.resize(autoload_cache.size()); @@ -734,10 +743,14 @@ void EditorAutoloadSettings::drop_data_fw(const Point2 &p_point, const Variant & } } - int i = 0; - + idx = 0; for (const AutoloadInfo &F : autoload_cache) { - orders.write[i++] = F.order; + orders.write[idx++] = F.order; + } + + // If the order didn't change, we shouldn't create undo/redo actions. + if (orders == initial_orders) { + return; } orders.sort(); @@ -746,10 +759,9 @@ void EditorAutoloadSettings::drop_data_fw(const Point2 &p_point, const Variant & undo_redo->create_action(TTR("Rearrange Autoloads")); - i = 0; - + idx = 0; for (const AutoloadInfo &F : autoload_cache) { - undo_redo->add_do_method(ProjectSettings::get_singleton(), "set_order", "autoload/" + F.name, orders[i++]); + undo_redo->add_do_method(ProjectSettings::get_singleton(), "set_order", "autoload/" + F.name, orders[idx++]); undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set_order", "autoload/" + F.name, F.order); }