Use a MouseEventHandler for activating tabs on mouse down

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.
This commit is contained in:
Antonio Scandurra 2022-05-27 11:43:58 +02:00
parent 98de269b4a
commit 82d6e606fc

View file

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