diff options
Diffstat (limited to 'Userland/Libraries')
-rw-r--r-- | Userland/Libraries/LibGUI/TabWidget.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/Userland/Libraries/LibGUI/TabWidget.cpp b/Userland/Libraries/LibGUI/TabWidget.cpp index 88fe7977a4..c0220f0681 100644 --- a/Userland/Libraries/LibGUI/TabWidget.cpp +++ b/Userland/Libraries/LibGUI/TabWidget.cpp @@ -56,10 +56,17 @@ void TabWidget::add_widget(const StringView& title, Widget& widget) void TabWidget::remove_widget(Widget& widget) { VERIFY(widget.parent() == this); - if (active_widget() == &widget) - activate_next_tab(); - m_tabs.remove_first_matching([&widget](auto& entry) { return &widget == entry.widget; }); + auto tab_index = m_tabs.find_if([&widget](auto& entry) { return &widget == entry.widget; }).index(); + + auto is_active = active_widget() == &widget; + m_tabs.remove(tab_index); remove_child(widget); + + if (is_active && m_tabs.size() > 0) { + auto next_tab_index = tab_index >= m_tabs.size() ? m_tabs.size() - 1 : tab_index; + set_tab_index(next_tab_index); + } + update_focus_policy(); if (on_tab_count_change) on_tab_count_change(m_tabs.size()); |