Browse Source

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.
Marcus Nilsson 4 years ago
parent
commit
54852832b1
1 changed files with 11 additions and 12 deletions
  1. 11 12
      Userland/Libraries/LibGUI/TabWidget.cpp

+ 11 - 12
Userland/Libraries/LibGUI/TabWidget.cpp

@@ -358,20 +358,19 @@ void TabWidget::mouseup_event(MouseEvent& event)
     if (event.button() != MouseButton::Left)
     if (event.button() != MouseButton::Left)
         return;
         return;
 
 
-    if (!m_close_button_enabled)
+    if (!m_close_button_enabled || m_pressed_close_button_index == -1)
         return;
         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;
     }
     }
 }
 }