From 15d40d6df5f2cc523b62718da3f28ba7cb443fb0 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 8 Nov 2023 15:30:41 +0100 Subject: [PATCH] Determine whether the gutter was hovered --- crates/editor2/src/editor.rs | 20 ++++++-------------- crates/editor2/src/element.rs | 12 ++++++++---- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/crates/editor2/src/editor.rs b/crates/editor2/src/editor.rs index cfa615c321..8c691b3350 100644 --- a/crates/editor2/src/editor.rs +++ b/crates/editor2/src/editor.rs @@ -249,11 +249,6 @@ pub struct UnfoldAt { pub buffer_row: u32, } -#[action] -pub struct GutterHover { - pub hovered: bool, -} - #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum InlayId { Suggestion(usize), @@ -8309,15 +8304,12 @@ impl Editor { } } - // todo!() - // pub fn gutter_hover( - // &mut self, - // GutterHover { hovered }: &GutterHover, - // cx: &mut ViewContext, - // ) { - // self.gutter_hovered = *hovered; - // cx.notify(); - // } + pub fn set_gutter_hovered(&mut self, hovered: bool, cx: &mut ViewContext) { + if hovered != self.gutter_hovered { + self.gutter_hovered = hovered; + cx.notify(); + } + } pub fn insert_blocks( &mut self, diff --git a/crates/editor2/src/element.rs b/crates/editor2/src/element.rs index c2ffaad638..fc2a4ccb92 100644 --- a/crates/editor2/src/element.rs +++ b/crates/editor2/src/element.rs @@ -351,6 +351,7 @@ impl EditorElement { event: &MouseMoveEvent, position_map: &PositionMap, text_bounds: Bounds, + gutter_bounds: Bounds, cx: &mut ViewContext, ) -> bool { let modifiers = event.modifiers; @@ -388,9 +389,12 @@ impl EditorElement { ); } - // This will be handled more correctly once https://github.com/zed-industries/zed/issues/1218 is completed + let text_hovered = text_bounds.contains_point(&event.position); + let gutter_hovered = gutter_bounds.contains_point(&event.position); + editor.set_gutter_hovered(gutter_hovered, cx); + // Don't trigger hover popover if mouse is hovering over context menu - if text_bounds.contains_point(&event.position) { + if text_hovered { let point_for_position = position_map.point_for_position(text_bounds, event.position); match point_for_position.as_valid() { @@ -420,7 +424,7 @@ impl EditorElement { } else { update_go_to_definition_link(editor, None, modifiers.command, modifiers.shift, cx); hover_at(editor, None, cx); - false + gutter_hovered } } @@ -2349,7 +2353,7 @@ impl EditorElement { return; } - if Self::mouse_moved(editor, event, &position_map, text_bounds, cx) { + if Self::mouse_moved(editor, event, &position_map, text_bounds, gutter_bounds, cx) { cx.stop_propagation() } }