summaryrefslogtreecommitdiff
path: root/scene/gui/control.cpp
diff options
context:
space:
mode:
authorZae <zaevi@live.com>2021-10-22 19:44:38 +0800
committerZae <zaevi@live.com>2021-10-23 13:01:52 +0800
commit924c2078dae69e73032af04e96200f44187d2c8d (patch)
treedcc13350670b4c231e45a6b120f9f1d1e42d9c5d /scene/gui/control.cpp
parentfe3d62f2dc9a9bb37b6f9a1e17a7f16fa153aca8 (diff)
Fix unexpected crashes in `notification`
Diffstat (limited to 'scene/gui/control.cpp')
-rw-r--r--scene/gui/control.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index 973074397b..e4048fbf09 100644
--- a/scene/gui/control.cpp
+++ b/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) {