Tab Bar: Fixed a small bug where closing a tab that is not selected would leave a tab hole for a frame.
diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt
index b2e0cca..236d278 100644
--- a/docs/CHANGELOG.txt
+++ b/docs/CHANGELOG.txt
@@ -81,6 +81,7 @@
and amends the change done in 1.76 which only affected cases were _OpenOnArrow flag was set.
(This is also necessary to support full multi/range-select/drag and drop operations.)
- Tab Bar: Keep tab item close button visible while dragging a tab (independent of hovering state).
+- Tab Bar: Fixed a small bug where closing a tab that is not selected would leave a tab hole for a frame.
- Tab Bar: Fixed a small bug where toggling a tab bar from Reorderable to not Reorderable would leave
tabs reordered in the tab list popup. [@Xipiryon]
- Columns: Fix inverted ClipRect being passed to renderer when using certain primitives inside of
diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp
index 1239457..a8cc231 100644
--- a/imgui_widgets.cpp
+++ b/imgui_widgets.cpp
@@ -7148,17 +7148,22 @@
// Called on manual closure attempt
void ImGui::TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab)
{
- if ((tab_bar->VisibleTabId == tab->ID) && !(tab->Flags & ImGuiTabItemFlags_UnsavedDocument))
+ if (!(tab->Flags & ImGuiTabItemFlags_UnsavedDocument))
{
// This will remove a frame of lag for selecting another tab on closure.
// However we don't run it in the case where the 'Unsaved' flag is set, so user gets a chance to fully undo the closure
- tab->LastFrameVisible = -1;
- tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = 0;
+ tab->WantClose = true;
+ if (tab_bar->VisibleTabId == tab->ID)
+ {
+ tab->LastFrameVisible = -1;
+ tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = 0;
+ }
}
- else if ((tab_bar->VisibleTabId != tab->ID) && (tab->Flags & ImGuiTabItemFlags_UnsavedDocument))
+ else
{
- // Actually select before expecting closure
- tab_bar->NextSelectedTabId = tab->ID;
+ // Actually select before expecting closure attempt (on an UnsavedDocument tab user is expect to e.g. show a popup)
+ if (tab_bar->VisibleTabId != tab->ID)
+ tab_bar->NextSelectedTabId = tab->ID;
}
}