@@ -924,12 +924,19 @@ void SceneTreeEditor::_update_tree(bool p_scroll_to_selected) {
924
924
// If pinned state changed, update the currently pinned node.
925
925
if (AnimationPlayerEditor::get_singleton ()->is_pinned () != node_cache.current_has_pin ) {
926
926
node_cache.current_has_pin = AnimationPlayerEditor::get_singleton ()->is_pinned ();
927
- node_cache.mark_dirty (pinned_node);
927
+ if (node_cache.has (pinned_node)) {
928
+ node_cache.mark_dirty (pinned_node);
929
+ }
928
930
}
929
931
// If the current pinned node changed update both the old and new node.
930
932
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 );
933
+ // get_editing_node() will return deleted nodes. If the nodes are not in cache don't try to mark them.
934
+ if (node_cache.has (pinned_node)) {
935
+ node_cache.mark_dirty (pinned_node);
936
+ }
937
+ if (node_cache.has (node_cache.current_pinned_node )) {
938
+ node_cache.mark_dirty (node_cache.current_pinned_node );
939
+ }
933
940
node_cache.current_pinned_node = pinned_node;
934
941
}
935
942
@@ -2373,6 +2380,10 @@ HashMap<Node *, SceneTreeEditor::CachedNode>::Iterator SceneTreeEditor::NodeCach
2373
2380
return I;
2374
2381
}
2375
2382
2383
+ bool SceneTreeEditor::NodeCache::has (Node *p_node) {
2384
+ return get (p_node, false ).operator bool ();
2385
+ }
2386
+
2376
2387
void SceneTreeEditor::NodeCache::remove (Node *p_node, bool p_recursive) {
2377
2388
if (!p_node) {
2378
2389
return ;
@@ -2382,6 +2393,11 @@ void SceneTreeEditor::NodeCache::remove(Node *p_node, bool p_recursive) {
2382
2393
editor->selected = nullptr ;
2383
2394
}
2384
2395
2396
+ if (p_node == current_pinned_node) {
2397
+ current_pinned_node = nullptr ;
2398
+ current_has_pin = false ;
2399
+ }
2400
+
2385
2401
editor->marked .erase (p_node);
2386
2402
2387
2403
HashMap<Node *, CachedNode>::Iterator I = cache.find (p_node);
@@ -2419,6 +2435,7 @@ void SceneTreeEditor::NodeCache::mark_dirty(Node *p_node, bool p_parents) {
2419
2435
if (!p_parents) {
2420
2436
break ;
2421
2437
}
2438
+
2422
2439
node = node->get_parent ();
2423
2440
}
2424
2441
}
@@ -2483,4 +2500,6 @@ void SceneTreeEditor::NodeCache::clear() {
2483
2500
}
2484
2501
cache.clear ();
2485
2502
to_delete.clear ();
2503
+ current_pinned_node = nullptr ;
2504
+ current_has_pin = false ;
2486
2505
}
0 commit comments