@@ -928,8 +928,13 @@ void SceneTreeEditor::_update_tree(bool p_scroll_to_selected) {
928
928
}
929
929
// If the current pinned node changed update both the old and new node.
930
930
if (node_cache.current_pinned_node != pinned_node) {
931
- node_cache.mark_dirty (pinned_node);
932
- node_cache.mark_dirty (node_cache.current_pinned_node );
931
+ // get_editing_node() will return deleted nodes. If the nodes are not in cache don't try to mark them.
932
+ if (node_cache.has (pinned_node)) {
933
+ node_cache.mark_dirty (pinned_node);
934
+ }
935
+ if (node_cache.has (node_cache.current_pinned_node )) {
936
+ node_cache.mark_dirty (node_cache.current_pinned_node );
937
+ }
933
938
node_cache.current_pinned_node = pinned_node;
934
939
}
935
940
@@ -2373,6 +2378,14 @@ HashMap<Node *, SceneTreeEditor::CachedNode>::Iterator SceneTreeEditor::NodeCach
2373
2378
return I;
2374
2379
}
2375
2380
2381
+ bool SceneTreeEditor::NodeCache::has (Node *p_node) {
2382
+ HashMap<Node *, CachedNode>::Iterator I = get (p_node, false );
2383
+ if (I) {
2384
+ return true ;
2385
+ }
2386
+ return false ;
2387
+ }
2388
+
2376
2389
void SceneTreeEditor::NodeCache::remove (Node *p_node, bool p_recursive) {
2377
2390
if (!p_node) {
2378
2391
return ;
@@ -2382,6 +2395,11 @@ void SceneTreeEditor::NodeCache::remove(Node *p_node, bool p_recursive) {
2382
2395
editor->selected = nullptr ;
2383
2396
}
2384
2397
2398
+ if (p_node == current_pinned_node) {
2399
+ current_pinned_node = nullptr ;
2400
+ current_has_pin = false ;
2401
+ }
2402
+
2385
2403
editor->marked .erase (p_node);
2386
2404
2387
2405
HashMap<Node *, CachedNode>::Iterator I = cache.find (p_node);
@@ -2419,6 +2437,7 @@ void SceneTreeEditor::NodeCache::mark_dirty(Node *p_node, bool p_parents) {
2419
2437
if (!p_parents) {
2420
2438
break ;
2421
2439
}
2440
+
2422
2441
node = node->get_parent ();
2423
2442
}
2424
2443
}
@@ -2483,4 +2502,6 @@ void SceneTreeEditor::NodeCache::clear() {
2483
2502
}
2484
2503
cache.clear ();
2485
2504
to_delete.clear ();
2505
+ current_pinned_node = nullptr ;
2506
+ current_has_pin = false ;
2486
2507
}
0 commit comments