diff options
author | Markus Sauermann <6299227+Sauermann@users.noreply.github.com> | 2022-03-17 09:11:46 +0100 |
---|---|---|
committer | Markus Sauermann <6299227+Sauermann@users.noreply.github.com> | 2022-04-01 13:34:57 +0200 |
commit | 249d6a4225ed8fc6c0375496c5bfc99e056a4b45 (patch) | |
tree | 572e8daa52ec5bba22608ed2d6713f1615f611cf | |
parent | 4263f02f28af79324667674ad4f2ededddf19047 (diff) |
Fix how Root Control Node is determined
-rw-r--r-- | scene/gui/control.cpp | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 96d2b29fc1..03dd8b22a0 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -712,35 +712,25 @@ void Control::_notification(int p_notification) { data.parent_window = Object::cast_to<Window>(get_parent()); data.is_rtl_dirty = true; - Node *parent = this; //meh + CanvasItem *node = this; Control *parent_control = nullptr; - bool subwindow = false; - - while (parent) { - parent = parent->get_parent(); + while (!node->is_set_as_top_level()) { + CanvasItem *parent = Object::cast_to<CanvasItem>(node->get_parent()); if (!parent) { break; } - CanvasItem *ci = Object::cast_to<CanvasItem>(parent); - if (ci && ci->is_set_as_top_level()) { - subwindow = true; - break; - } - parent_control = Object::cast_to<Control>(parent); - if (parent_control) { break; - } else if (ci) { - } else { - break; } + + node = parent; } - if (parent_control && !subwindow) { - //do nothing, has a parent control and not top_level + if (parent_control) { + // Do nothing, has a parent control. if (data.theme.is_null() && parent_control->data.theme_owner) { data.theme_owner = parent_control->data.theme_owner; notification(NOTIFICATION_THEME_CHANGED); |