From 33b29704926f623f97402e0cfbf2591a163b8ab6 Mon Sep 17 00:00:00 2001 From: kleonc <9283098+kleonc@users.noreply.github.com> Date: Sun, 22 May 2022 16:17:59 +0200 Subject: [PATCH] EditorPropertyArray Fix crash when drag-reordering elements in the inspector --- editor/editor_properties_array_dict.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp index 25016c7f824..608121d8062 100644 --- a/editor/editor_properties_array_dict.cpp +++ b/editor/editor_properties_array_dict.cpp @@ -607,11 +607,16 @@ void EditorPropertyArray::_reorder_button_gui_input(const Ref &p_eve Variant array = object->get_array(); int size = array.call("size"); - if ((reorder_to_index == 0 && mm->get_relative().y < 0.0f) || (reorder_to_index == size - 1 && mm->get_relative().y > 0.0f)) { + // Cumulate the mouse delta, many small changes (dragging slowly) should result in reordering at some point. + reorder_mouse_y_delta += mm->get_relative().y; + + // Reordering is done by moving the dragged element by +1/-1 index at a time based on the cumulated mouse delta so if + // already at the array bounds make sure to ignore the remaining out of bounds drag (by resetting the cumulated delta). + if ((reorder_to_index == 0 && reorder_mouse_y_delta < 0.0f) || (reorder_to_index == size - 1 && reorder_mouse_y_delta > 0.0f)) { + reorder_mouse_y_delta = 0.0f; return; } - reorder_mouse_y_delta += mm->get_relative().y; float required_y_distance = 20.0f * EDSCALE; if (ABS(reorder_mouse_y_delta) > required_y_distance) { int direction = reorder_mouse_y_delta > 0.0f ? 1 : -1;