Browse Source

Added has_signal method for Object

(cherry picked from commit 258d91f883eb3db0ebc709f4f7e43ccb6948a7fc)
PouleyKetchoupp 5 years ago
parent
commit
82bee3f993
3 changed files with 31 additions and 1 deletions
  1. 20 0
      core/object.cpp
  2. 1 0
      core/object.h
  3. 10 1
      doc/classes/Object.xml

+ 20 - 0
core/object.cpp

@@ -1353,6 +1353,25 @@ Array Object::_get_incoming_connections() const {
 	return ret;
 }
 
+bool Object::has_signal(const StringName &p_name) const {
+	if (!script.is_null()) {
+		Ref<Script> scr = script;
+		if (scr.is_valid() && scr->has_script_signal(p_name)) {
+			return true;
+		}
+	}
+
+	if (ClassDB::has_signal(get_class_name(), p_name)) {
+		return true;
+	}
+
+	if (_has_user_signal(p_name)) {
+		return true;
+	}
+
+	return false;
+}
+
 void Object::get_signal_list(List<MethodInfo> *p_signals) const {
 
 	if (!script.is_null()) {
@@ -1707,6 +1726,7 @@ void Object::_bind_methods() {
 
 	ClassDB::bind_method(D_METHOD("has_method", "method"), &Object::has_method);
 
+	ClassDB::bind_method(D_METHOD("has_signal", "signal"), &Object::has_signal);
 	ClassDB::bind_method(D_METHOD("get_signal_list"), &Object::_get_signal_list);
 	ClassDB::bind_method(D_METHOD("get_signal_connection_list", "signal"), &Object::_get_signal_connection_list);
 	ClassDB::bind_method(D_METHOD("get_incoming_connections"), &Object::_get_incoming_connections);

+ 1 - 0
core/object.h

@@ -704,6 +704,7 @@ public:
 	void add_user_signal(const MethodInfo &p_signal);
 	Error emit_signal(const StringName &p_name, VARIANT_ARG_LIST);
 	Error emit_signal(const StringName &p_name, const Variant **p_args, int p_argcount);
+	bool has_signal(const StringName &p_name) const;
 	void get_signal_list(List<MethodInfo> *p_signals) const;
 	void get_signal_connection_list(const StringName &p_signal, List<Connection> *p_connections) const;
 	void get_all_signal_connections(List<Connection> *p_connections) const;

+ 10 - 1
doc/classes/Object.xml

@@ -313,13 +313,22 @@
 				Returns [code]true[/code] if the object contains the given [code]method[/code].
 			</description>
 		</method>
+		<method name="has_signal" qualifiers="const">
+			<return type="bool">
+			</return>
+			<argument index="0" name="signal" type="String">
+			</argument>
+			<description>
+				Returns [code]true[/code] if the given [code]signal[/code] exists.
+			</description>
+		</method>
 		<method name="has_user_signal" qualifiers="const">
 			<return type="bool">
 			</return>
 			<argument index="0" name="signal" type="String">
 			</argument>
 			<description>
-				Returns [code]true[/code] if the given user-defined [code]signal[/code] exists.
+				Returns [code]true[/code] if the given user-defined [code]signal[/code] exists. Only signals added using [method add_user_signal] are taken into account.
 			</description>
 		</method>
 		<method name="is_blocking_signals" qualifiers="const">