From 7601808455bd95ab3f943719becd467d3b813616 Mon Sep 17 00:00:00 2001 From: ktxyz Date: Sun, 30 Oct 2022 15:03:01 +0100 Subject: [PATCH] Update sub_windows order with respect to FLAG_ALWAYS_ON_TOP --- scene/main/viewport.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index f8b0a66a719..da6291ade82 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -162,6 +162,24 @@ ViewportTexture::~ViewportTexture() { } void Viewport::_sub_window_update_order() { + if (gui.sub_windows.size() < 2) { + return; + } + + if (!gui.sub_windows[gui.sub_windows.size() - 1].window->get_flag(Window::FLAG_ALWAYS_ON_TOP)) { + int index = gui.sub_windows.size() - 1; + + while (index > 0 && gui.sub_windows[index - 1].window->get_flag(Window::FLAG_ALWAYS_ON_TOP)) { + --index; + } + + if (index != (gui.sub_windows.size() - 1)) { + SubWindow sw = gui.sub_windows[gui.sub_windows.size() - 1]; + gui.sub_windows.remove_at(gui.sub_windows.size() - 1); + gui.sub_windows.insert(index, sw); + } + } + for (int i = 0; i < gui.sub_windows.size(); i++) { RS::get_singleton()->canvas_item_set_draw_index(gui.sub_windows[i].canvas_item, i); }