Use a `MouseEventHandler` for activating tabs on mouse down

Antonio Scandurra created

Previously, we were using an `EventHandler` which doesn't take into
account other mouse regions floating above the rendered element. This
was problematic because, when clicking the `x` icon on a tab that was
not active, we were first activating it and then closing it.

Change summary

crates/workspace/src/pane.rs | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

Detailed changes

crates/workspace/src/pane.rs 🔗

@@ -689,6 +689,7 @@ impl Pane {
         let theme = cx.global::<Settings>().theme.clone();
 
         enum Tabs {}
+        enum Tab {}
         let pane = cx.handle();
         let tabs = MouseEventHandler::new::<Tabs, _, _>(0, cx, |mouse_state, cx| {
             let autoscroll = if mem::take(&mut self.autoscroll) {
@@ -717,7 +718,7 @@ impl Pane {
                         style.container.border.left = false;
                     }
 
-                    EventHandler::new(
+                    MouseEventHandler::new::<Tab, _, _>(ix, cx, |_, cx| {
                         Container::new(
                             Flex::row()
                                 .with_child(
@@ -807,11 +808,10 @@ impl Pane {
                                 .boxed(),
                         )
                         .with_style(style.container)
-                        .boxed(),
-                    )
-                    .on_mouse_down(move |cx| {
+                        .boxed()
+                    })
+                    .on_mouse_down(move |_, cx| {
                         cx.dispatch_action(ActivateItem(ix));
-                        true
                     })
                     .boxed()
                 })