Explorar el Código

Fix NOTIFICATION_POSTINITIALIZE sent twice to native parent class

(cherry picked from commit 06373ce1cf737a33d6a7b2b14cfe25ed729b9c48)
David Snopek hace 1 año
padre
commit
7b93607779
Se han modificado 2 ficheros con 7 adiciones y 4 borrados
  1. 6 0
      include/godot_cpp/classes/wrapped.hpp
  2. 1 4
      src/classes/wrapped.cpp

+ 6 - 0
include/godot_cpp/classes/wrapped.hpp

@@ -76,6 +76,7 @@ protected:
 	uint32_t plist_size = 0;
 
 	void _postinitialize();
+	virtual void _notificationv(int32_t p_what) {}
 
 	Wrapped(const StringName p_godot_class);
 	Wrapped(GodotObject *p_godot_object);
@@ -328,6 +329,11 @@ public:
 		_gde_binding_reference_callback,                                                                                                                                               \
 	};                                                                                                                                                                                 \
                                                                                                                                                                                        \
+protected:                                                                                                                                                                             \
+	virtual void _notificationv(int32_t p_what) override {                                                                                                                             \
+		m_class::notification_bind(this, p_what);                                                                                                                                      \
+	}                                                                                                                                                                                  \
+                                                                                                                                                                                       \
 private:
 
 // Don't use this for your classes, use GDCLASS() instead.

+ 1 - 4
src/classes/wrapped.cpp

@@ -51,10 +51,7 @@ void Wrapped::_postinitialize() {
 	}
 	godot::internal::gdextension_interface_object_set_instance_binding(_owner, godot::internal::token, this, _get_bindings_callbacks());
 	if (extension_class) {
-		Object *obj = dynamic_cast<Object *>(this);
-		if (obj) {
-			obj->notification(Object::NOTIFICATION_POSTINITIALIZE);
-		}
+		_notificationv(Object::NOTIFICATION_POSTINITIALIZE);
 	}
 }