From b4f60ae3acaddfcc3cae02c7f9e804b1909a8f02 Mon Sep 17 00:00:00 2001 From: volzhs Date: Fri, 22 Jun 2018 14:48:49 +0900 Subject: [PATCH] Fix crash when assigning a node on editing animation key --- editor/animation_track_editor.cpp | 5 +++++ editor/editor_properties.cpp | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index 02d667031a9..d71ae14987e 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -25,6 +25,7 @@ public: ClassDB::bind_method("_update_obj", &AnimationTrackKeyEdit::_update_obj); ClassDB::bind_method("_key_ofs_changed", &AnimationTrackKeyEdit::_key_ofs_changed); ClassDB::bind_method("_hide_script_from_inspector", &AnimationTrackKeyEdit::_hide_script_from_inspector); + ClassDB::bind_method("get_root_path", &AnimationTrackKeyEdit::get_root_path); } //PopupDialog *ke_dialog; @@ -612,6 +613,10 @@ public: _change_notify(); } + Node *get_root_path() { + return root_path; + } + AnimationTrackKeyEdit() { hidden = true; key_ofs = 0; diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 5abcae80e08..d3da257fde6 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -1522,8 +1522,15 @@ EditorPropertyColor::EditorPropertyColor() { void EditorPropertyNodePath::_node_selected(const NodePath &p_path) { + NodePath path = p_path; Node *base_node = Object::cast_to(get_edited_object()); - emit_signal("property_changed", get_edited_property(), base_node->get_path().rel_path_to(p_path)); + if (base_node == NULL && get_edited_object()->has_method("get_root_path")) { + base_node = get_edited_object()->call("get_root_path"); + } + if (base_node) { // for AnimationTrackKeyEdit + path = base_node->get_path().rel_path_to(p_path); + } + emit_signal("property_changed", get_edited_property(), path); update_property(); }