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/app | |
| parent | 73dba97521f5a0e3104518ef48b775a178998f52 (diff) | |
fix: force redraw on terminal focus gain
Diffstat (limited to 'src/app')
| -rw-r--r-- | src/app/mod.rs | 10 | ||||
| -rw-r--r-- | src/app/runtime.rs | 4 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/app/mod.rs b/src/app/mod.rs index 7c3bae76..a332503f 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -80,6 +80,7 @@ pub struct App { HashSet<(crossterm::event::KeyCode, crossterm::event::KeyModifiers)>, pub render_notify: Arc<Notify>, pub render_dirty: Arc<AtomicBool>, + pub(crate) full_redraw_pending: bool, pub(crate) overlay_panes: HashMap<crate::layout::PaneId, OverlayPaneState>, pub(crate) local_terminal_notifications: bool, } @@ -441,11 +442,16 @@ impl App { last_terminal_size: terminal::size().ok(), render_notify, render_dirty, + full_redraw_pending: false, overlay_panes: HashMap::new(), local_terminal_notifications: true, } } + fn request_full_redraw(&mut self) { + self.full_redraw_pending = true; + } + pub async fn run(&mut self, terminal: &mut DefaultTerminal) -> io::Result<()> { if self.input_rx.is_none() { self.input_rx = Some(crate::raw_input::spawn_input_reader()); @@ -507,6 +513,10 @@ impl App { if needs_render && self.can_render_now(now) { self.render_dirty.swap(false, Ordering::AcqRel); let _sync_output = SyncOutputGuard::begin()?; + if self.full_redraw_pending { + terminal.clear()?; + self.full_redraw_pending = false; + } let kitty_graphics_enabled = self.state.kitty_graphics_enabled; let mut cell_size = crate::kitty_graphics::HostCellSize::default(); terminal.draw(|frame| { diff --git a/src/app/runtime.rs b/src/app/runtime.rs index 6cdb6b43..4d2f6c47 100644 --- a/src/app/runtime.rs +++ b/src/app/runtime.rs @@ -95,8 +95,10 @@ impl App { true } crate::raw_input::RawInputEvent::OuterFocusGained => { + self.request_full_redraw(); self.state.outer_terminal_focus = Some(true); - self.state.mark_active_tab_seen() + self.state.mark_active_tab_seen(); + true } crate::raw_input::RawInputEvent::OuterFocusLost => { self.state.outer_terminal_focus = Some(false); |
