diff options
Diffstat (limited to 'src/app/runtime.rs')
| -rw-r--r-- | src/app/runtime.rs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/app/runtime.rs b/src/app/runtime.rs index 180c3cef..bd7830b9 100644 --- a/src/app/runtime.rs +++ b/src/app/runtime.rs @@ -167,13 +167,15 @@ impl App { true } crate::raw_input::RawInputEvent::Mouse(mouse) => { + let changes_view = !matches!(mouse.kind, crossterm::event::MouseEventKind::Moved) + || self.state.mode.mouse_motion_changes_view(); if self.state.popup_pane.is_some() || self.state.mouse_capture { self.handle_mouse(mouse); } else { self.state .handle_pane_mouse_only(&self.terminal_runtimes, mouse); } - true + changes_view } crate::raw_input::RawInputEvent::OuterFocusGained => { self.send_outer_focus_event(crate::ghostty::FocusEvent::Gained); @@ -809,6 +811,24 @@ mod tests { } #[tokio::test] + async fn passive_mouse_motion_does_not_request_monolithic_render() { + let (mut app, _) = test_app_with_pane(); + app.state.mode = crate::app::Mode::Terminal; + let motion = || { + crate::raw_input::RawInputEvent::Mouse(crossterm::event::MouseEvent { + kind: crossterm::event::MouseEventKind::Moved, + column: 10, + row: 5, + modifiers: crossterm::event::KeyModifiers::empty(), + }) + }; + + assert!(!app.handle_raw_input_event(motion()).await); + app.state.mode = crate::app::Mode::GlobalMenu; + assert!(app.handle_raw_input_event(motion()).await); + } + + #[tokio::test] async fn raw_input_batch_does_not_start_pending_agent_resume_before_render() { let (mut app, pane_id) = test_app_with_pane(); app.state.ensure_test_terminals(); |
