浏览代码

Merge pull request #15480 from StateOff/fixes_deleted_nodes_in_history

Fixes #15416 - "The deleted nodes are hanging in the inspector."
Rémi Verschelde 7 年之前
父节点
当前提交
8f4140c9c1
共有 4 个文件被更改,包括 19 次插入8 次删除
  1. 11 5
      editor/editor_data.cpp
  2. 2 2
      editor/editor_data.h
  3. 1 1
      editor/editor_node.cpp
  4. 5 0
      editor/scene_tree_dock.cpp

+ 11 - 5
editor/editor_data.cpp

@@ -38,7 +38,7 @@
 #include "project_settings.h"
 #include "scene/resources/packed_scene.h"
 
-void EditorHistory::_cleanup_history() {
+void EditorHistory::cleanup_history() {
 
 	for (int i = 0; i < history.size(); i++) {
 
@@ -48,8 +48,14 @@ void EditorHistory::_cleanup_history() {
 			if (!history[i].path[j].ref.is_null())
 				continue;
 
-			if (ObjectDB::get_instance(history[i].path[j].object))
-				continue; //has isntance, try next
+			Object *obj = ObjectDB::get_instance(history[i].path[j].object);
+			if (obj) {
+				Node *n = Object::cast_to<Node>(obj);
+				if (n && n->is_inside_tree())
+					continue;
+				if (!n) // Possibly still alive
+					continue;
+			}
 
 			if (j <= history[i].level) {
 				//before or equal level, complete fail
@@ -152,7 +158,7 @@ bool EditorHistory::is_at_end() const {
 
 bool EditorHistory::next() {
 
-	_cleanup_history();
+	cleanup_history();
 
 	if ((current + 1) < history.size())
 		current++;
@@ -164,7 +170,7 @@ bool EditorHistory::next() {
 
 bool EditorHistory::previous() {
 
-	_cleanup_history();
+	cleanup_history();
 
 	if (current > 0)
 		current--;

+ 2 - 2
editor/editor_data.h

@@ -70,11 +70,11 @@ class EditorHistory {
 		Variant value;
 	};
 
-	void _cleanup_history();
-
 	void _add_object(ObjectID p_object, const String &p_property, int p_level_change);
 
 public:
+	void cleanup_history();
+
 	bool is_at_beginning() const;
 	bool is_at_end() const;
 

+ 1 - 1
editor/editor_node.cpp

@@ -1398,7 +1398,7 @@ void EditorNode::_property_editor_forward() {
 }
 void EditorNode::_property_editor_back() {
 
-	if (editor_history.previous())
+	if (editor_history.previous() || editor_history.get_path_size() == 1)
 		_edit_current();
 }
 

+ 5 - 0
editor/scene_tree_dock.cpp

@@ -1285,6 +1285,11 @@ void SceneTreeDock::_delete_confirm() {
 		editor->get_viewport_control()->update();
 
 	editor->push_item(NULL);
+
+	// Fixes the EditorHistory from still offering deleted notes
+	EditorHistory *editor_history = EditorNode::get_singleton()->get_editor_history();
+	editor_history->cleanup_history();
+	EditorNode::get_singleton()->call("_prepare_history");
 }
 
 void SceneTreeDock::_selection_changed() {