summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <remi@verschelde.fr>2022-12-09 07:34:29 +0100
committerGitHub <noreply@github.com>2022-12-09 07:34:29 +0100
commit2d02cb67ee904b7614a6a5396669c575193fb73f (patch)
treef4fe45b7e7572b812331330b3a4ca8b4a8f22760
parent36763f65e6b56b11f1f3e96ed7103304cce76532 (diff)
parent885f2a4eca0f348e8d04e45e6e9a0e950f4c6964 (diff)
Merge pull request #69661 from Mickeon/fix-editor-cannot-disconnect-signal
Fix unable to disconnect signal in Editor once created
-rw-r--r--core/object/object.h1
-rw-r--r--editor/connections_dialog.cpp18
-rw-r--r--scene/resources/packed_scene.cpp2
3 files changed, 3 insertions, 18 deletions
diff --git a/core/object/object.h b/core/object/object.h
index 3ad8391dd6..446550f91f 100644
--- a/core/object/object.h
+++ b/core/object/object.h
@@ -556,6 +556,7 @@ public:
CONNECT_PERSIST = 2, // hint for scene to save this connection
CONNECT_ONE_SHOT = 4,
CONNECT_REFERENCE_COUNTED = 8,
+ CONNECT_INHERITED = 16, // Used in editor builds.
};
struct Connection {
diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp
index 2bd77bf99c..1f0cc1dc77 100644
--- a/editor/connections_dialog.cpp
+++ b/editor/connections_dialog.cpp
@@ -788,23 +788,7 @@ bool ConnectionsDock::_is_item_signal(TreeItem &p_item) {
}
bool ConnectionsDock::_is_connection_inherited(Connection &p_connection) {
- Node *scene_root = EditorNode::get_singleton()->get_edited_scene();
- Ref<PackedScene> scn = ResourceLoader::load(scene_root->get_scene_file_path());
- ERR_FAIL_NULL_V(scn, false);
-
- Ref<SceneState> state = scn->get_state();
- ERR_FAIL_NULL_V(state, false);
-
- Node *source = Object::cast_to<Node>(p_connection.signal.get_object());
- Node *target = Object::cast_to<Node>(p_connection.callable.get_object());
-
- const NodePath source_path = scene_root->get_path_to(source);
- const NodePath target_path = scene_root->get_path_to(target);
- const StringName signal_name = p_connection.signal.get_name();
- const StringName method_name = p_connection.callable.get_method();
-
- // If it cannot be found in PackedScene, this connection was inherited.
- return !state->has_connection(source_path, signal_name, target_path, method_name, true);
+ return bool(p_connection.flags & CONNECT_INHERITED);
}
/*
diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp
index f4b7f3d0b2..5316b524ba 100644
--- a/scene/resources/packed_scene.cpp
+++ b/scene/resources/packed_scene.cpp
@@ -450,7 +450,7 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const {
callable = callable.bindp(argptrs, binds.size());
}
- cfrom->connect(snames[c.signal], callable, CONNECT_PERSIST | c.flags);
+ cfrom->connect(snames[c.signal], callable, CONNECT_PERSIST | c.flags | (p_edit_state == GEN_EDIT_STATE_MAIN ? 0 : CONNECT_INHERITED));
}
//Node *s = ret_nodes[0];