Преглед на файлове

Merge pull request #54120 from zaevi/fix_null-ref_crashes

Rémi Verschelde преди 3 години
родител
ревизия
e0f887accd
променени са 4 файла, в които са добавени 13 реда и са изтрити 3 реда
  1. 1 0
      scene/2d/collision_polygon_2d.cpp
  2. 2 0
      scene/2d/collision_shape_2d.cpp
  3. 1 0
      scene/2d/ray_cast_2d.cpp
  4. 9 3
      scene/gui/control.cpp

+ 1 - 0
scene/2d/collision_polygon_2d.cpp

@@ -131,6 +131,7 @@ void CollisionPolygon2D::_notification(int p_what) {
 		} break;
 
 		case NOTIFICATION_DRAW: {
+			ERR_FAIL_COND(!is_inside_tree());
 			if (!Engine::get_singleton()->is_editor_hint() && !get_tree()->is_debugging_collisions_hint()) {
 				break;
 			}

+ 2 - 0
scene/2d/collision_shape_2d.cpp

@@ -88,6 +88,8 @@ void CollisionShape2D::_notification(int p_what) {
 
 		} break;
 		case NOTIFICATION_DRAW: {
+			ERR_FAIL_COND(!is_inside_tree());
+
 			if (!Engine::get_singleton()->is_editor_hint() && !get_tree()->is_debugging_collisions_hint()) {
 				break;
 			}

+ 1 - 0
scene/2d/ray_cast_2d.cpp

@@ -157,6 +157,7 @@ void RayCast2D::_notification(int p_what) {
 		} break;
 
 		case NOTIFICATION_DRAW: {
+			ERR_FAIL_COND(!is_inside_tree());
 			if (!Engine::get_singleton()->is_editor_hint() && !get_tree()->is_debugging_collisions_hint()) {
 				break;
 			}

+ 9 - 3
scene/gui/control.cpp

@@ -637,7 +637,9 @@ void Control::_notification(int p_notification) {
 				}
 			} else {
 				//is a regular root control or top_level
-				data.RI = get_viewport()->_gui_add_root_control(this);
+				Viewport *viewport = get_viewport();
+				ERR_FAIL_COND(!viewport);
+				data.RI = viewport->_gui_add_root_control(this);
 			}
 
 			data.parent_canvas_item = get_parent_item();
@@ -646,7 +648,9 @@ void Control::_notification(int p_notification) {
 				data.parent_canvas_item->connect("item_rect_changed", callable_mp(this, &Control::_size_changed));
 			} else {
 				//connect viewport
-				get_viewport()->connect("size_changed", callable_mp(this, &Control::_size_changed));
+				Viewport *viewport = get_viewport();
+				ERR_FAIL_COND(!viewport);
+				viewport->connect("size_changed", callable_mp(this, &Control::_size_changed));
 			}
 		} break;
 		case NOTIFICATION_EXIT_CANVAS: {
@@ -655,7 +659,9 @@ void Control::_notification(int p_notification) {
 				data.parent_canvas_item = nullptr;
 			} else if (!is_set_as_top_level()) {
 				//disconnect viewport
-				get_viewport()->disconnect("size_changed", callable_mp(this, &Control::_size_changed));
+				Viewport *viewport = get_viewport();
+				ERR_FAIL_COND(!viewport);
+				viewport->disconnect("size_changed", callable_mp(this, &Control::_size_changed));
 			}
 
 			if (data.RI) {