Skip to content

Commit

Permalink
Don't create an UndoRedo action if Autoload order doesn't change afte…
Browse files Browse the repository at this point in the history
…r Drag & Drop
  • Loading branch information
MewPurPur authored and akien-mga committed Jan 6, 2025
1 parent 1aaf20b commit 4cadfd3
Showing 1 changed file with 18 additions and 6 deletions.
24 changes: 18 additions & 6 deletions editor/editor_autoload_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<int> 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<int> orders;
orders.resize(autoload_cache.size());

Expand All @@ -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();
Expand All @@ -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);
}

Expand Down

0 comments on commit 4cadfd3

Please sign in to comment.