aboutsummaryrefslogtreecommitdiff
path: root/src/server/clients.rs
diff options
context:
space:
mode:
authorJJ Liebig <jonathan.liebig@gmail.com>2026-09-01 23:46:16 +0400
committerGitHub <noreply@github.com>2026-09-01 21:46:16 +0200
commit99c23cd1ea7468bd3661f6483c7105396503b417 (patch)
treeeb1582557a5a62f4679c706b8f53e29529d1568a /src/server/clients.rs
parent98307c509e9688575d006b47d26d0db561cda0a4 (diff)
fix(windows): preserve native pane key identity (#3503)
Diffstat (limited to 'src/server/clients.rs')
-rw-r--r--src/server/clients.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/server/clients.rs b/src/server/clients.rs
index d380e2c3..3860f826 100644
--- a/src/server/clients.rs
+++ b/src/server/clients.rs
@@ -188,6 +188,7 @@ impl ClientConnection {
shifted_codepoint,
tracks_release: true,
physical_key_id,
+ windows_record,
..
} => {
self.shell_held_inputs.insert(
@@ -203,6 +204,7 @@ impl ClientConnection {
generated_text: None,
tracks_release: true,
physical_key_id: *physical_key_id,
+ windows_record: *windows_record,
},
},
);
@@ -458,6 +460,7 @@ mod tests {
generated_text: Some("x".into()),
tracks_release: false,
physical_key_id: None,
+ windows_record: None,
}],
);
@@ -467,6 +470,14 @@ mod tests {
#[test]
fn physical_keys_with_the_same_semantic_code_keep_distinct_release_leases() {
let mut client = shell_client();
+ let windows_record = crate::input::WindowsKeyRecord {
+ key_down: true,
+ repeat_count: 1,
+ virtual_key_code: 0x6c,
+ virtual_scan_code: 0x1c,
+ unicode: 13,
+ control_key_state: 0,
+ };
let key = |kind, physical_key_id| ClientPaneInputEvent::Key {
code: crate::protocol::ClientKeyCode::Enter,
modifiers: 0,
@@ -476,6 +487,7 @@ mod tests {
generated_text: None,
tracks_release: true,
physical_key_id: Some(physical_key_id),
+ windows_record: (physical_key_id == 108).then_some(windows_record),
};
client.track_shell_input(
ClientShellInputTarget::Pane("w1:p1".into()),
@@ -494,8 +506,9 @@ mod tests {
code: crate::protocol::ClientKeyCode::Enter,
kind: ClientKeyKind::Release,
physical_key_id: Some(108),
+ windows_record: Some(record),
..
- }
+ } if *record == windows_record
));
}
}