summaryrefslogtreecommitdiffstats
path: root/scene/gui/container.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/gui/container.cpp')
-rw-r--r--scene/gui/container.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/scene/gui/container.cpp b/scene/gui/container.cpp
index f1faf3e899..c328022d4f 100644
--- a/scene/gui/container.cpp
+++ b/scene/gui/container.cpp
@@ -139,9 +139,15 @@ void Container::queue_sort() {
pending_sort = true;
}
-Control *Container::as_sortable_control(Node *p_node) const {
+Control *Container::as_sortable_control(Node *p_node, SortableVisbilityMode p_visibility_mode) const {
Control *c = Object::cast_to<Control>(p_node);
- if (!c || !c->is_visible_in_tree() || c->is_set_as_top_level()) {
+ if (!c || c->is_set_as_top_level()) {
+ return nullptr;
+ }
+ if (p_visibility_mode == SortableVisbilityMode::VISIBLE && !c->is_visible()) {
+ return nullptr;
+ }
+ if (p_visibility_mode == SortableVisbilityMode::VISIBLE_IN_TREE && !c->is_visible_in_tree()) {
return nullptr;
}
return c;
@@ -177,13 +183,9 @@ Vector<int> Container::get_allowed_size_flags_vertical() const {
void Container::_notification(int p_what) {
switch (p_what) {
- case NOTIFICATION_ENTER_TREE: {
- pending_sort = false;
- queue_sort();
- } break;
-
case NOTIFICATION_RESIZED:
- case NOTIFICATION_THEME_CHANGED: {
+ case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_ENTER_TREE: {
queue_sort();
} break;