aboutsummaryrefslogtreecommitdiff
path: root/src/app/mod.rs
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-07-26 00:28:11 +0300
committerGitHub <noreply@github.com>2026-07-26 00:28:11 +0300
commit547aba8e0ab310623f1986d3026658f708d432bd (patch)
tree8b05ec9feec9a3c3c04f21aa308bf22faad3772a /src/app/mod.rs
parentb01fc37e66aac45c7fa9eccc826d793d68608a0a (diff)
fix: avoid renders for passive mouse motion (#1872)
refs #1865
Diffstat (limited to 'src/app/mod.rs')
-rw-r--r--src/app/mod.rs39
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");