diff --git a/modules/gridmap/editor/grid_map_editor_plugin.cpp b/modules/gridmap/editor/grid_map_editor_plugin.cpp index 2f3025c743..49f1da69e9 100644 --- a/modules/gridmap/editor/grid_map_editor_plugin.cpp +++ b/modules/gridmap/editor/grid_map_editor_plugin.cpp @@ -312,7 +312,7 @@ void GridMapEditor::_set_selection(bool p_active, const Vector3 &p_begin, const selection.click = p_begin; selection.current = p_end; - if (is_visible_in_tree()) { + if (is_inside_tree()) { _update_selection_transform(); } } @@ -559,15 +559,16 @@ void GridMapEditor::_delete_selection_with_undo() { undo_redo->commit_action(); } -void GridMapEditor::_setup_paste_mode() { - input_action = INPUT_PASTE; - paste_indicator.click = selection.click; - paste_indicator.current = cursor_gridpos; - paste_indicator.begin = selection.begin; - paste_indicator.end = selection.end; - paste_indicator.distance_from_cursor = cursor_gridpos - paste_indicator.begin; - paste_indicator.orientation = 0; - _update_paste_indicator(); +void GridMapEditor::_clear_selection_with_undo() { + if (!selection.active) { + return; + } + + EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); + undo_redo->create_action(TTR("GridMap Clear Selection")); + undo_redo->add_do_method(this, "_set_selection", false, Vector3(), Vector3()); + undo_redo->add_undo_method(this, "_set_selection", true, selection.begin, selection.end); + undo_redo->commit_action(); } void GridMapEditor::_fill_selection() { @@ -591,6 +592,17 @@ void GridMapEditor::_fill_selection() { undo_redo->commit_action(); } +void GridMapEditor::_setup_paste_mode() { + input_action = INPUT_PASTE; + paste_indicator.click = selection.click; + paste_indicator.current = cursor_gridpos; + paste_indicator.begin = selection.begin; + paste_indicator.end = selection.end; + paste_indicator.distance_from_cursor = cursor_gridpos - paste_indicator.begin; + paste_indicator.orientation = 0; + _update_paste_indicator(); +} + void GridMapEditor::_clear_clipboard_data() { for (const ClipboardItem &E : clipboard_items) { if (E.instance.is_null()) { @@ -811,7 +823,7 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D _cancel_pending_move(); return EditorPlugin::AFTER_GUI_INPUT_STOP; } else if (selection.active) { - _set_selection(false); + _clear_selection_with_undo(); return EditorPlugin::AFTER_GUI_INPUT_STOP; } else { input_action = INPUT_NONE; @@ -888,12 +900,10 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D } } else if (mb->get_button_index() == MouseButton::RIGHT) { if (input_action == INPUT_PASTE) { - _clear_clipboard_data(); - input_action = INPUT_NONE; - _update_paste_indicator(); + _cancel_pending_move(); return EditorPlugin::AFTER_GUI_INPUT_STOP; } else if (selection.active) { - _set_selection(false); + _clear_selection_with_undo(); if (input_action == INPUT_SELECT) { input_action = INPUT_NONE; } diff --git a/modules/gridmap/editor/grid_map_editor_plugin.h b/modules/gridmap/editor/grid_map_editor_plugin.h index ba2dd3fda3..ead7b5072e 100644 --- a/modules/gridmap/editor/grid_map_editor_plugin.h +++ b/modules/gridmap/editor/grid_map_editor_plugin.h @@ -256,6 +256,7 @@ class GridMapEditor : public EditorDock { void _delete_selection(); void _delete_selection_with_undo(); void _fill_selection(); + void _clear_selection_with_undo(); void _setup_paste_mode(); bool do_input_action(Camera3D *p_camera, const Point2 &p_point, bool p_click);