From be0e66ef21fbc95bc318bd730750363e8f166679 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 27 May 2022 11:20:39 +0200 Subject: [PATCH] Invoke `mouse_down` and `right_mouse_down` callbacks --- crates/gpui/src/presenter.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/crates/gpui/src/presenter.rs b/crates/gpui/src/presenter.rs index 58f6f127af..68e624c0ce 100644 --- a/crates/gpui/src/presenter.rs +++ b/crates/gpui/src/presenter.rs @@ -217,7 +217,9 @@ impl Presenter { let mut invalidated_views = Vec::new(); let mut hovered_regions = Vec::new(); let mut unhovered_regions = Vec::new(); + let mut mouse_down_region = None; let mut clicked_region = None; + let mut right_mouse_down_region = None; let mut right_clicked_region = None; let mut dragged_region = None; @@ -226,6 +228,7 @@ impl Presenter { for region in self.mouse_regions.iter().rev() { if region.bounds.contains_point(position) { invalidated_views.push(region.view_id); + mouse_down_region = Some((region.clone(), position)); self.clicked_region = Some(region.clone()); self.prev_drag_position = Some(position); break; @@ -249,6 +252,7 @@ impl Presenter { for region in self.mouse_regions.iter().rev() { if region.bounds.contains_point(position) { invalidated_views.push(region.view_id); + right_mouse_down_region = Some((region.clone(), position)); self.right_clicked_region = Some(region.clone()); break; } @@ -339,6 +343,15 @@ impl Presenter { } } + if let Some((mouse_down_region, position)) = mouse_down_region { + if let Some(mouse_down_callback) = mouse_down_region.mouse_down { + handled = true; + event_cx.with_current_view(mouse_down_region.view_id, |event_cx| { + mouse_down_callback(position, event_cx); + }) + } + } + if let Some((clicked_region, position, click_count)) = clicked_region { if let Some(click_callback) = clicked_region.click { handled = true; @@ -348,6 +361,15 @@ impl Presenter { } } + if let Some((right_mouse_down_region, position)) = right_mouse_down_region { + if let Some(right_mouse_down_callback) = right_mouse_down_region.right_mouse_down { + handled = true; + event_cx.with_current_view(right_mouse_down_region.view_id, |event_cx| { + right_mouse_down_callback(position, event_cx); + }) + } + } + 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;