summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkobewi <kobewi4e@gmail.com>2021-09-12 21:17:34 +0200
committerkobewi <kobewi4e@gmail.com>2021-09-12 21:17:34 +0200
commit363a9c674a13376daeb8689489bf5366b9db10d3 (patch)
treef832b29cf56f1624929a12405e6165888433e23d
parent5f69218edc4f4af574c7a65f077e2e0bf1f28365 (diff)
Don't edit foreign resources when restoring scene
-rw-r--r--editor/editor_node.cpp14
-rw-r--r--editor/editor_node.h2
2 files changed, 12 insertions, 4 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index f86a36df2f..abe71bb983 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -2072,11 +2072,19 @@ static bool overrides_external_editor(Object *p_object) {
return script->get_language()->overrides_external_editor();
}
-void EditorNode::_edit_current() {
+void EditorNode::_edit_current(bool p_skip_foreign) {
ObjectID current = editor_history.get_current();
Object *current_obj = current.is_valid() ? ObjectDB::get_instance(current) : nullptr;
- bool inspector_only = editor_history.is_current_inspector_only();
+ RES res = Object::cast_to<Resource>(current_obj);
+ if (p_skip_foreign && res.is_valid()) {
+ if (res->get_path().find("::") > -1 && res->get_path().get_slice("::", 0) != editor_data.get_scene_path(get_current_tab())) {
+ // Trying to edit resource that belongs to another scene; abort.
+ current_obj = nullptr;
+ }
+ }
+
+ bool inspector_only = editor_history.is_current_inspector_only();
this->current = current_obj;
if (!current_obj) {
@@ -3441,7 +3449,7 @@ void EditorNode::set_current_scene(int p_idx) {
}
Dictionary state = editor_data.restore_edited_scene_state(editor_selection, &editor_history);
- _edit_current();
+ _edit_current(true);
_update_title();
diff --git a/editor/editor_node.h b/editor/editor_node.h
index 03c18a8972..3027588c89 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -455,7 +455,7 @@ private:
void _dialog_action(String p_file);
- void _edit_current();
+ void _edit_current(bool p_skip_foreign = false);
void _dialog_display_save_error(String p_file, Error p_error);
void _dialog_display_load_error(String p_file, Error p_error);