diff --git a/crates/gpui/src/elements/div.rs b/crates/gpui/src/elements/div.rs index 547d967620d68c309563af1d2e56d2ab3f194d4f..952cef7f58e6628c71b517ff74735b092edc37f7 100644 --- a/crates/gpui/src/elements/div.rs +++ b/crates/gpui/src/elements/div.rs @@ -2154,7 +2154,6 @@ impl Interactivity { || cx.active_drag.is_some() && !self.drag_over_styles.is_empty() { let hitbox = hitbox.clone(); - let was_hovered = hitbox.is_hovered(window); let hover_state = self.hover_style.as_ref().and_then(|_| { element_state .as_ref() @@ -2162,8 +2161,12 @@ impl Interactivity { .cloned() }); let current_view = window.current_view(); + window.on_mouse_event(move |_: &MouseMoveEvent, phase, window, cx| { let hovered = hitbox.is_hovered(window); + let was_hovered = hover_state + .as_ref() + .is_some_and(|state| state.borrow().element); if phase == DispatchPhase::Capture && hovered != was_hovered { if let Some(hover_state) = &hover_state { hover_state.borrow_mut().element = hovered; @@ -2179,12 +2182,13 @@ impl Interactivity { .as_ref() .and_then(|element| element.hover_state.as_ref()) .cloned(); - - let was_group_hovered = group_hitbox_id.is_hovered(window); let current_view = window.current_view(); window.on_mouse_event(move |_: &MouseMoveEvent, phase, window, cx| { let group_hovered = group_hitbox_id.is_hovered(window); + let was_group_hovered = hover_state + .as_ref() + .is_some_and(|state| state.borrow().group); if phase == DispatchPhase::Capture && group_hovered != was_group_hovered { if let Some(hover_state) = &hover_state { hover_state.borrow_mut().group = group_hovered;