瀏覽代碼

Merge pull request #87980 from KoBeWi/this_history_is_now…_history

Check if history exists before discarding
Rémi Verschelde 1 年之前
父節點
當前提交
9a63aeda79
共有 3 個文件被更改,包括 8 次插入1 次删除
  1. 3 1
      editor/editor_data.cpp
  2. 4 0
      editor/editor_undo_redo_manager.cpp
  3. 1 0
      editor/editor_undo_redo_manager.h

+ 3 - 1
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);
 }
 

+ 4 - 0
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);

+ 1 - 0
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();