| 5642 | } |
| 5643 | |
| 5644 | static void UpdateWindowInFocusOrderList(ImGuiWindow* window, bool just_created, ImGuiWindowFlags new_flags) |
| 5645 | { |
| 5646 | ImGuiContext& g = *GImGui; |
| 5647 | |
| 5648 | const bool new_is_explicit_child = (new_flags & ImGuiWindowFlags_ChildWindow) != 0 && ((new_flags & ImGuiWindowFlags_Popup) == 0 || (new_flags & ImGuiWindowFlags_ChildMenu) != 0); |
| 5649 | const bool child_flag_changed = new_is_explicit_child != window->IsExplicitChild; |
| 5650 | if ((just_created || child_flag_changed) && !new_is_explicit_child) |
| 5651 | { |
| 5652 | IM_ASSERT(!g.WindowsFocusOrder.contains(window)); |
| 5653 | g.WindowsFocusOrder.push_back(window); |
| 5654 | window->FocusOrder = (short)(g.WindowsFocusOrder.Size - 1); |
| 5655 | } |
| 5656 | else if (!just_created && child_flag_changed && new_is_explicit_child) |
| 5657 | { |
| 5658 | IM_ASSERT(g.WindowsFocusOrder[window->FocusOrder] == window); |
| 5659 | for (int n = window->FocusOrder + 1; n < g.WindowsFocusOrder.Size; n++) |
| 5660 | g.WindowsFocusOrder[n]->FocusOrder--; |
| 5661 | g.WindowsFocusOrder.erase(g.WindowsFocusOrder.Data + window->FocusOrder); |
| 5662 | window->FocusOrder = -1; |
| 5663 | } |
| 5664 | window->IsExplicitChild = new_is_explicit_child; |
| 5665 | } |
| 5666 | |
| 5667 | static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags) |
| 5668 | { |