diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/object.cpp | 16 | ||||
-rw-r--r-- | core/script_language.h | 1 |
2 files changed, 15 insertions, 2 deletions
diff --git a/core/object.cpp b/core/object.cpp index ea77090a45..3a14c7c0b5 100644 --- a/core/object.cpp +++ b/core/object.cpp @@ -1443,8 +1443,20 @@ Error Object::connect(const StringName &p_signal, Object *p_to_object, const Str if (!s) { bool signal_is_valid = ClassDB::has_signal(get_class_name(), p_signal); //check in script - if (!signal_is_valid && !script.is_null() && Ref<Script>(script)->has_script_signal(p_signal)) - signal_is_valid = true; + if (!signal_is_valid && !script.is_null()) { + + if (Ref<Script>(script)->has_script_signal(p_signal)) { + signal_is_valid = true; + } +#ifdef TOOLS_ENABLED + else { + //allow connecting signals anyway if script is invalid, see issue #17070 + if (!Ref<Script>(script)->is_valid()) { + signal_is_valid = true; + } + } +#endif + } if (!signal_is_valid) { ERR_EXPLAIN("In Object of type '" + String(get_class()) + "': Attempt to connect nonexistent signal '" + p_signal + "' to method '" + p_to_object->get_class() + "." + p_to_method + "'"); diff --git a/core/script_language.h b/core/script_language.h index bcd9c2c5ea..654d1d4265 100644 --- a/core/script_language.h +++ b/core/script_language.h @@ -128,6 +128,7 @@ public: virtual MethodInfo get_method_info(const StringName &p_method) const = 0; virtual bool is_tool() const = 0; + virtual bool is_valid() const = 0; virtual ScriptLanguage *get_language() const = 0; |