| 5520 | } |
| 5521 | |
| 5522 | static void UpdateWindowInFocusOrderList(ImGuiWindow* window, bool just_created, ImGuiWindowFlags new_flags) |
| 5523 | { |
| 5524 | ImGuiContext& g = *GImGui; |
| 5525 | |
| 5526 | const bool new_is_explicit_child = (new_flags & ImGuiWindowFlags_ChildWindow) != 0 && ((new_flags & ImGuiWindowFlags_Popup) == 0 || (new_flags & ImGuiWindowFlags_ChildMenu) != 0); |
| 5527 | const bool child_flag_changed = new_is_explicit_child != window->IsExplicitChild; |
| 5528 | if ((just_created || child_flag_changed) && !new_is_explicit_child) |
| 5529 | { |
| 5530 | IM_ASSERT(!g.WindowsFocusOrder.contains(window)); |
| 5531 | g.WindowsFocusOrder.push_back(window); |
| 5532 | window->FocusOrder = (short)(g.WindowsFocusOrder.Size - 1); |
| 5533 | } |
| 5534 | else if (!just_created && child_flag_changed && new_is_explicit_child) |
| 5535 | { |
| 5536 | IM_ASSERT(g.WindowsFocusOrder[window->FocusOrder] == window); |
| 5537 | for (int n = window->FocusOrder + 1; n < g.WindowsFocusOrder.Size; n++) |
| 5538 | g.WindowsFocusOrder[n]->FocusOrder--; |
| 5539 | g.WindowsFocusOrder.erase(g.WindowsFocusOrder.Data + window->FocusOrder); |
| 5540 | window->FocusOrder = -1; |
| 5541 | } |
| 5542 | window->IsExplicitChild = new_is_explicit_child; |
| 5543 | } |
| 5544 | |
| 5545 | static void InitOrLoadWindowSettings(ImGuiWindow* window, ImGuiWindowSettings* settings) |
| 5546 | { |