aboutsummaryrefslogtreecommitdiff
path: root/src/app
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/app
parent73dba97521f5a0e3104518ef48b775a178998f52 (diff)
fix: force redraw on terminal focus gain
Diffstat (limited to 'src/app')
-rw-r--r--src/app/mod.rs10
-rw-r--r--src/app/runtime.rs4
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);