diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 786e841c21c..b4cf6d8de1e 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -649,7 +649,9 @@ void EditorData::remove_scene(int p_idx) { EditorNode::get_singleton()->emit_signal("scene_closed", edited_scene[p_idx].path); } - undo_redo_manager->discard_history(edited_scene[p_idx].history_id); + if (undo_redo_manager->has_history(edited_scene[p_idx].history_id)) { // Might not exist if scene failed to load. + undo_redo_manager->discard_history(edited_scene[p_idx].history_id); + } edited_scene.remove_at(p_idx); } diff --git a/editor/editor_undo_redo_manager.cpp b/editor/editor_undo_redo_manager.cpp index c2491f86113..94f76dbc419 100644 --- a/editor/editor_undo_redo_manager.cpp +++ b/editor/editor_undo_redo_manager.cpp @@ -375,6 +375,10 @@ bool EditorUndoRedoManager::has_redo() { return false; } +bool EditorUndoRedoManager::has_history(int p_idx) const { + return history_map.has(p_idx); +} + void EditorUndoRedoManager::clear_history(bool p_increase_version, int p_idx) { if (p_idx != INVALID_HISTORY) { History &history = get_or_create_history(p_idx); diff --git a/editor/editor_undo_redo_manager.h b/editor/editor_undo_redo_manager.h index effa36a87c4..e8c782871cb 100644 --- a/editor/editor_undo_redo_manager.h +++ b/editor/editor_undo_redo_manager.h @@ -130,6 +130,7 @@ public: bool is_history_unsaved(int p_idx); bool has_undo(); bool has_redo(); + bool has_history(int p_idx) const; String get_current_action_name(); int get_current_action_history_id();