diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-07-26 00:28:11 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-07-26 00:28:11 +0300 |
| commit | 547aba8e0ab310623f1986d3026658f708d432bd (patch) | |
| tree | 8b05ec9feec9a3c3c04f21aa308bf22faad3772a /src/app/mod.rs | |
| parent | b01fc37e66aac45c7fa9eccc826d793d68608a0a (diff) | |
fix: avoid renders for passive mouse motion (#1872)
refs #1865
Diffstat (limited to 'src/app/mod.rs')
| -rw-r--r-- | src/app/mod.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/app/mod.rs b/src/app/mod.rs index c2d479b3..e9aa24b6 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -5762,6 +5762,45 @@ last_pane = "prefix+tab" } #[tokio::test] + async fn popup_mouse_motion_preserves_scrollback() { + let mut app = test_app(); + app.state.mode = Mode::Terminal; + app.state.view.terminal_area = ratatui::layout::Rect::new(0, 0, 80, 24); + let (popup_runtime, mut popup_rx) = TerminalRuntime::test_with_channel_and_scrollback_bytes( + 40, + 2, + 1024, + b"one\r\ntwo\r\nthree\r\n\x1b[?1003h\x1b[?1006h", + 4, + ); + popup_runtime.scroll_up(1); + assert!(popup_runtime + .scroll_metrics() + .is_some_and(|metrics| metrics.offset_from_bottom > 0)); + app.install_test_popup_runtime(popup_runtime); + let (_, inner) = + crate::ui::popup_pane_rects(&app.state, app.state.view.terminal_area).unwrap(); + + app.route_client_events( + vec![crate::raw_input::RawInputEvent::Mouse( + crossterm::event::MouseEvent { + kind: crossterm::event::MouseEventKind::Moved, + column: inner.x + 1, + row: inner.y, + modifiers: crossterm::event::KeyModifiers::NONE, + }, + )], + true, + ); + + assert!(popup_rx.try_recv().is_ok()); + assert!(app + .popup_runtime() + .and_then(TerminalRuntime::scroll_metrics) + .is_some_and(|metrics| metrics.offset_from_bottom > 0)); + } + + #[tokio::test] async fn route_client_events_routes_popup_mouse_when_global_capture_is_disabled() { let mut app = test_app(); let mut workspace = Workspace::test_new("tiled"); |
