From 54852832b192978fc873f74038e80792a476385e Mon Sep 17 00:00:00 2001 From: Marcus Nilsson Date: Sun, 20 Jun 2021 21:28:27 +0200 Subject: [PATCH] LibGUI/TabWidget: Make sure we don't act on two mouseup events Make sure that even if we get two mouseup events, we do not try to remove the same widget twice. --- Userland/Libraries/LibGUI/TabWidget.cpp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Userland/Libraries/LibGUI/TabWidget.cpp b/Userland/Libraries/LibGUI/TabWidget.cpp index caddf24254..4f0572fefa 100644 --- a/Userland/Libraries/LibGUI/TabWidget.cpp +++ b/Userland/Libraries/LibGUI/TabWidget.cpp @@ -358,20 +358,19 @@ void TabWidget::mouseup_event(MouseEvent& event) if (event.button() != MouseButton::Left) return; - if (!m_close_button_enabled) + if (!m_close_button_enabled || m_pressed_close_button_index == -1) return; - for (size_t i = 0; i < m_tabs.size(); ++i) { - auto close_button_rect = this->close_button_rect(i); - if (close_button_rect.contains(event.position())) { - auto* widget = m_tabs[i].widget; - deferred_invoke([this, widget](auto&) { - if (on_tab_close_click && widget) - on_tab_close_click(*widget); - }); - m_pressed_close_button_index = -1; - return; - } + auto close_button_rect = this->close_button_rect(m_pressed_close_button_index); + + if (close_button_rect.contains(event.position())) { + auto* widget = m_tabs[m_pressed_close_button_index].widget; + deferred_invoke([this, widget](auto&) { + if (on_tab_close_click && widget) + on_tab_close_click(*widget); + }); + m_pressed_close_button_index = -1; + return; } }