diff options
Diffstat (limited to 'src/app/input/mod.rs')
| -rw-r--r-- | src/app/input/mod.rs | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/app/input/mod.rs b/src/app/input/mod.rs index 738b7963..16713222 100644 --- a/src/app/input/mod.rs +++ b/src/app/input/mod.rs @@ -256,6 +256,31 @@ impl App { } pub(super) fn handle_mouse(&mut self, mouse: MouseEvent) { + self.handle_mouse_from_input_source(super::LOCAL_INPUT_SOURCE, mouse); + } + + pub(super) fn handle_mouse_from_input_source( + &mut self, + source_id: super::InputSourceId, + mouse: MouseEvent, + ) { + match mouse.kind { + MouseEventKind::Down(MouseButton::Left) => { + self.pending_url_click_sources.remove(&source_id); + } + MouseEventKind::Drag(MouseButton::Left) + if self.pending_url_click_sources.contains(&source_id) => + { + return; + } + MouseEventKind::Up(MouseButton::Left) + if self.pending_url_click_sources.remove(&source_id) => + { + return; + } + _ => {} + } + if self.state.popup_pane.is_some() { self.handle_popup_mouse(mouse); return; @@ -284,7 +309,7 @@ impl App { } } - if self.handle_modified_url_click(mouse) { + if self.handle_modified_url_click(source_id, mouse) { return; } @@ -469,7 +494,11 @@ impl App { self.focus_pane_internal_via_api(ws_idx, pane_id); } - fn handle_modified_url_click(&mut self, mouse: MouseEvent) -> bool { + fn handle_modified_url_click( + &mut self, + source_id: super::InputSourceId, + mouse: MouseEvent, + ) -> bool { if self.state.mode != Mode::Terminal || !matches!(mouse.kind, MouseEventKind::Down(MouseButton::Left)) || !mouse.modifiers.contains(modified_url_click_modifier()) @@ -490,6 +519,7 @@ impl App { }; self.last_pane_click = None; + self.pending_url_click_sources.insert(source_id); match self.invoke_plugin_link_handler_for_url(&url, info.id) { Ok(true) => return true, Ok(false) => {} |
