aboutsummaryrefslogtreecommitdiff
path: root/src/raw_input.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-15 21:17:55 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-15 21:17:55 +0300
commite1a84a8e340f09b9479ca2df333ba135a45d2048 (patch)
tree23ebb0b08e3531a03373d0586372b07e93dd0dc8 /src/raw_input.rs
parent73dba97521f5a0e3104518ef48b775a178998f52 (diff)
fix: force redraw on terminal focus gain
Diffstat (limited to 'src/raw_input.rs')
-rw-r--r--src/raw_input.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/raw_input.rs b/src/raw_input.rs
index 3ebd9554..28a2e561 100644
--- a/src/raw_input.rs
+++ b/src/raw_input.rs
@@ -128,6 +128,12 @@ pub enum RawInputEvent {
Unsupported,
}
+pub(crate) fn events_require_host_surface_redraw(events: &[RawInputEvent]) -> bool {
+ events
+ .iter()
+ .any(|event| matches!(event, RawInputEvent::OuterFocusGained))
+}
+
pub fn spawn_input_reader() -> mpsc::Receiver<RawInputEvent> {
let (tx, rx) = mpsc::channel(256);
@@ -649,6 +655,15 @@ mod tests {
}
#[test]
+ fn outer_focus_gained_requests_host_surface_redraw() {
+ let events = parse_raw_input_bytes_sync(b"\x1b[I");
+ assert!(events_require_host_surface_redraw(&events));
+
+ let events = parse_raw_input_bytes_sync(b"\x1b[O");
+ assert!(!events_require_host_surface_redraw(&events));
+ }
+
+ #[test]
fn parses_xterm_alt_up_arrow() {
let (RawInputEvent::Key(key), consumed) = extract_one_event(b"\x1b[1;3A").unwrap() else {
panic!("expected key");