diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-15 21:17:55 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-15 21:17:55 +0300 |
| commit | e1a84a8e340f09b9479ca2df333ba135a45d2048 (patch) | |
| tree | 23ebb0b08e3531a03373d0586372b07e93dd0dc8 /src/raw_input.rs | |
| parent | 73dba97521f5a0e3104518ef48b775a178998f52 (diff) | |
fix: force redraw on terminal focus gain
Diffstat (limited to 'src/raw_input.rs')
| -rw-r--r-- | src/raw_input.rs | 15 |
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"); |
