From 3a822e8106b45745f9d463d9167033f977353d9f Mon Sep 17 00:00:00 2001 From: akbash Date: Sat, 5 Sep 2026 04:39:25 +0300 Subject: fix: preserve pixel mouse after sgr reassertion (#3637) refs #3295 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> --- src/server/headless/tests/mod.rs | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src/server/headless') diff --git a/src/server/headless/tests/mod.rs b/src/server/headless/tests/mod.rs index 2951a82d..1e4249b5 100644 --- a/src/server/headless/tests/mod.rs +++ b/src/server/headless/tests/mod.rs @@ -3884,6 +3884,48 @@ fn client_pane_pixel_mouse_uses_runtime_pixel_encoding() { rt.shutdown_timeout(Duration::from_millis(100)); } +#[test] +fn client_pane_pixel_mouse_stays_pixel_scaled_when_sgr_is_reasserted() { + let rt = tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("test runtime"); + let _runtime_guard = rt.enter(); + let (runtime, mut input_rx) = + crate::terminal::TerminalRuntime::test_with_channel_and_scrollback_bytes( + 80, + 24, + 0, + b"\x1b[?1003h\x1b[?1006h\x1b[?1016h\x1b[?1006h", + 4, + ); + runtime.resize(24, 80, 10, 20); + + apply_client_pane_input_events( + &runtime, + &[crate::protocol::ClientPaneInputEvent::Mouse { + kind: crate::protocol::ClientMouseKind::Down(crate::protocol::ClientMouseButton::Left), + position: crate::protocol::ClientMousePosition::Pixels { + x: 403, + y: 240, + column: 40, + row: 12, + }, + geometry: None, + modifiers: 0, + lines: 1, + }], + ) + .expect("pixel mouse input"); + assert_eq!( + input_rx.try_recv().expect("encoded pixel mouse"), + Bytes::from_static(b"\x1b[<0;403;240M") + ); + drop(runtime); + drop(_runtime_guard); + rt.shutdown_timeout(Duration::from_millis(100)); +} + #[test] fn client_pane_pixel_mouse_falls_back_to_canonical_cell_position() { let rt = tokio::runtime::Builder::new_current_thread() -- cgit v1.2.3