| 5288 | } |
| 5289 | |
| 5290 | static void UpdateWindowInFocusOrderList(ImGuiWindow* window, bool just_created, ImGuiWindowFlags new_flags) |
| 5291 | { |
| 5292 | ImGuiContext& g = *GImGui; |
| 5293 | |
| 5294 | const bool new_is_explicit_child = (new_flags & ImGuiWindowFlags_ChildWindow) != 0; |
| 5295 | const bool child_flag_changed = new_is_explicit_child != window->IsExplicitChild; |
| 5296 | if ((just_created || child_flag_changed) && !new_is_explicit_child) |
| 5297 | { |
| 5298 | IM_ASSERT(!g.WindowsFocusOrder.contains(window)); |
| 5299 | g.WindowsFocusOrder.push_back(window); |
| 5300 | window->FocusOrder = (short)(g.WindowsFocusOrder.Size - 1); |
| 5301 | } |
| 5302 | else if (!just_created && child_flag_changed && new_is_explicit_child) |
| 5303 | { |
| 5304 | IM_ASSERT(g.WindowsFocusOrder[window->FocusOrder] == window); |
| 5305 | for (int n = window->FocusOrder + 1; n < g.WindowsFocusOrder.Size; n++) |
| 5306 | g.WindowsFocusOrder[n]->FocusOrder--; |
| 5307 | g.WindowsFocusOrder.erase(g.WindowsFocusOrder.Data + window->FocusOrder); |
| 5308 | window->FocusOrder = -1; |
| 5309 | } |
| 5310 | window->IsExplicitChild = new_is_explicit_child; |
| 5311 | } |
| 5312 | |
| 5313 | static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags) |
| 5314 | { |
no test coverage detected