mirror of
https://github.com/Drezil/imgui.git
synced 2025-07-14 08:49:54 +02:00
This commit is contained in:
23
imgui.cpp
23
imgui.cpp
@ -10229,7 +10229,7 @@ static void ImGui::DockNodeAddWindow(ImGuiDockNode* node, ImGuiWindow* window, b
|
||||
node->TabBar = IM_NEW(ImGuiTabBar)();
|
||||
node->TabBar->SelectedTabId = node->TabBar->NextSelectedTabId = node->SelectedTabID;
|
||||
}
|
||||
TabBarAddTab(node->TabBar, window);
|
||||
TabBarAddTab(node->TabBar, window, ImGuiTabItemFlags_Unsorted);
|
||||
}
|
||||
|
||||
DockNodeUpdateVisibleFlag(node);
|
||||
@ -10729,15 +10729,22 @@ static void ImGui::DockNodeUpdateTabBar(ImGuiDockNode* node, ImGuiWindow* host_w
|
||||
tab_bar->SelectedTabId = focused_id;
|
||||
}
|
||||
|
||||
// Submit tabs order
|
||||
// If multiple tabs are appearing on the same frame, we add them ahead sorted based on their persistent DockOrder value
|
||||
int tabs_count_old = tab_bar->Tabs.Size;
|
||||
// Submit new tabs
|
||||
const int tabs_count_old = tab_bar->Tabs.Size;
|
||||
for (int window_n = 0; window_n < node->Windows.Size; window_n++)
|
||||
if (TabBarFindTabByID(tab_bar, node->Windows[window_n]->ID) == NULL)
|
||||
TabBarAddTab(tab_bar, node->Windows[window_n]);
|
||||
//printf("[%05d] Sorting %d new appearing tabs\n", g.FrameCount, tab_bar->Tabs.Size - tabs_count_old);
|
||||
if (tab_bar->Tabs.Size > tabs_count_old + 1)
|
||||
ImQsort(tab_bar->Tabs.Data + tabs_count_old, tab_bar->Tabs.Size - tabs_count_old, sizeof(ImGuiTabItem), TabItemComparerByDockOrder);
|
||||
TabBarAddTab(tab_bar, node->Windows[window_n], ImGuiTabItemFlags_Unsorted);
|
||||
|
||||
// If multiple tabs are appearing on the same frame, sort them based on their persistent DockOrder value
|
||||
int tabs_unsorted_start = tab_bar->Tabs.Size;
|
||||
for (int tab_n = tab_bar->Tabs.Size - 1; tab_n >= 0 && (tab_bar->Tabs[tab_n].Flags & ImGuiTabItemFlags_Unsorted); tab_n--)
|
||||
{
|
||||
tab_bar->Tabs[tab_n].Flags &= ~ImGuiTabItemFlags_Unsorted;
|
||||
tabs_unsorted_start = tab_n;
|
||||
}
|
||||
//printf("[%05d] Sorting %d new appearing tabs\n", g.FrameCount, tab_bar->Tabs.Size - tabs_unsorted_start);
|
||||
if (tab_bar->Tabs.Size > tabs_unsorted_start + 1)
|
||||
ImQsort(tab_bar->Tabs.Data + tabs_unsorted_start, tab_bar->Tabs.Size - tabs_unsorted_start, sizeof(ImGuiTabItem), TabItemComparerByDockOrder);
|
||||
|
||||
// Selected newly added tabs, or persistent tab ID if the tab bar was just recreated
|
||||
if (tab_bar_is_recreated && TabBarFindTabByID(tab_bar, node->SelectedTabID) != NULL)
|
||||
|
Reference in New Issue
Block a user