Skip to content

Commit 4523514

Browse files
committed
Fix 'exclusive' child window
1 parent 1f7630f commit 4523514

File tree

1 file changed

+23
-9
lines changed

1 file changed

+23
-9
lines changed

scene/main/viewport.cpp

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -270,17 +270,31 @@ void Viewport::_sub_window_update_order() {
270270
return;
271271
}
272272

273-
if (!gui.sub_windows[gui.sub_windows.size() - 1].window->get_flag(Window::FLAG_ALWAYS_ON_TOP)) {
274-
int index = gui.sub_windows.size() - 1;
275-
276-
while (index > 0 && gui.sub_windows[index - 1].window->get_flag(Window::FLAG_ALWAYS_ON_TOP)) {
277-
--index;
273+
// Reorder 'always on top' windows.
274+
int last_index = gui.sub_windows.size() - 1;
275+
for (int index = last_index, insert_index = last_index; index >= 0; index--) {
276+
SubWindow sw = gui.sub_windows[index];
277+
Window *parent_window = sw.window->get_parent_visible_window();
278+
bool parent_is_always_on_top = (parent_window != nullptr) && parent_window->get_flag(Window::FLAG_ALWAYS_ON_TOP);
279+
if (sw.window->get_flag(Window::FLAG_ALWAYS_ON_TOP) || (parent_is_always_on_top && sw.window->is_exclusive())) {
280+
if (index != insert_index) {
281+
gui.sub_windows.remove_at(index);
282+
gui.sub_windows.insert(insert_index, sw);
283+
}
284+
insert_index--;
278285
}
286+
}
279287

280-
if (index != (gui.sub_windows.size() - 1)) {
281-
SubWindow sw = gui.sub_windows[gui.sub_windows.size() - 1];
282-
gui.sub_windows.remove_at(gui.sub_windows.size() - 1);
283-
gui.sub_windows.insert(index, sw);
288+
// Reorder exclusive children.
289+
for (int parent_index = 0; parent_index < gui.sub_windows.size(); parent_index++) {
290+
Window *exclusive_child = gui.sub_windows[parent_index].window->get_exclusive_child();
291+
if (exclusive_child != nullptr && exclusive_child->is_visible()) {
292+
int child_index = _sub_window_find(exclusive_child);
293+
if (child_index < parent_index) {
294+
SubWindow sw = gui.sub_windows[child_index];
295+
gui.sub_windows.remove_at(child_index);
296+
gui.sub_windows.insert(parent_index, sw);
297+
}
284298
}
285299
}
286300

0 commit comments

Comments
 (0)