diff --git a/crates/gpui/src/presenter.rs b/crates/gpui/src/presenter.rs index 9a8a77258e..58f6f127af 100644 --- a/crates/gpui/src/presenter.rs +++ b/crates/gpui/src/presenter.rs @@ -320,8 +320,10 @@ impl Presenter { } let mut event_cx = self.build_event_context(cx); + let mut handled = false; for unhovered_region in unhovered_regions { if let Some(hover_callback) = unhovered_region.hover { + handled = true; event_cx.with_current_view(unhovered_region.view_id, |event_cx| { hover_callback(false, event_cx); }) @@ -330,6 +332,7 @@ impl Presenter { for hovered_region in hovered_regions { if let Some(hover_callback) = hovered_region.hover { + handled = true; event_cx.with_current_view(hovered_region.view_id, |event_cx| { hover_callback(true, event_cx); }) @@ -338,6 +341,7 @@ impl Presenter { if let Some((clicked_region, position, click_count)) = clicked_region { if let Some(click_callback) = clicked_region.click { + handled = true; event_cx.with_current_view(clicked_region.view_id, |event_cx| { click_callback(position, click_count, event_cx); }) @@ -346,6 +350,7 @@ impl Presenter { if let Some((right_clicked_region, position, click_count)) = right_clicked_region { if let Some(right_click_callback) = right_clicked_region.right_click { + handled = true; event_cx.with_current_view(right_clicked_region.view_id, |event_cx| { right_click_callback(position, click_count, event_cx); }) @@ -354,13 +359,16 @@ impl Presenter { if let Some((dragged_region, delta)) = dragged_region { if let Some(drag_callback) = dragged_region.drag { + handled = true; event_cx.with_current_view(dragged_region.view_id, |event_cx| { drag_callback(delta, event_cx); }) } } - event_cx.dispatch_event(root_view_id, &event); + if !handled { + event_cx.dispatch_event(root_view_id, &event); + } invalidated_views.extend(event_cx.invalidated_views); let dispatch_directives = event_cx.dispatched_actions;