summaryrefslogtreecommitdiffstats
path: root/editor/editor_properties.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2021-01-07 14:19:52 +0100
committerGitHub <noreply@github.com>2021-01-07 14:19:52 +0100
commitc7b45141de9538e06dee0f4fd7799ff75d5f4eff (patch)
treeb18169b4188c2bda6c5d52673812d4830d589a06 /editor/editor_properties.cpp
parentcf4c58838fb148a1087ddd7e5461cc2eb3c386ec (diff)
parent6fbe0a494b9945f7adcc8603ebfbfeb040f718ba (diff)
downloadredot-engine-c7b45141de9538e06dee0f4fd7799ff75d5f4eff.tar.gz
Merge pull request #44980 from RandomShaper/fix_res_lifetime
Fix cases of resources destroyed too early
Diffstat (limited to 'editor/editor_properties.cpp')
-rw-r--r--editor/editor_properties.cpp15
1 files changed, 6 insertions, 9 deletions
diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp
index a358cddfae..3fa183e10c 100644
--- a/editor/editor_properties.cpp
+++ b/editor/editor_properties.cpp
@@ -2544,35 +2544,32 @@ void EditorPropertyResource::_menu_option(int p_which) {
return;
}
- Object *obj = nullptr;
- RES res_temp;
+ Variant obj;
if (ScriptServer::is_global_class(intype)) {
obj = ClassDB::instance(ScriptServer::get_global_class_native_base(intype));
if (obj) {
- res_temp = obj;
Ref<Script> script = ResourceLoader::load(ScriptServer::get_global_class_path(intype));
if (script.is_valid()) {
- obj->set_script(Variant(script));
+ ((Object *)obj)->set_script(script);
}
}
} else {
obj = ClassDB::instance(intype);
- res_temp = obj;
}
if (!obj) {
obj = EditorNode::get_editor_data().instance_custom_type(intype, "Resource");
- res_temp = obj;
}
- ERR_BREAK(!res_temp.is_valid());
+ Resource *resp = Object::cast_to<Resource>(obj);
+ ERR_BREAK(!resp);
if (get_edited_object() && base_type != String() && base_type == "Script") {
//make visual script the right type
- res_temp->call("set_instance_base_type", get_edited_object()->get_class());
+ resp->call("set_instance_base_type", get_edited_object()->get_class());
}
- res = res_temp;
+ res = RES(resp);
emit_changed(get_edited_property(), res);
update_property();