From ea57a65321edfc44277555de73449bce8b5d58fa Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Tue, 31 Mar 2026 02:03:45 +0300 Subject: fix: make app rendering event-driven --- src/persist.rs | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'src/persist.rs') diff --git a/src/persist.rs b/src/persist.rs index 9cc6205e..49a36141 100644 --- a/src/persist.rs +++ b/src/persist.rs @@ -4,12 +4,14 @@ use std::collections::HashMap; use std::path::PathBuf; +use std::sync::atomic::AtomicBool; +use std::sync::Arc; use ratatui::layout::Direction; use serde::{Deserialize, Serialize}; use tracing::{error, info, warn}; -use tokio::sync::mpsc; +use tokio::sync::{mpsc, Notify}; use crate::events::AppEvent; use crate::layout::{Node, PaneId, TileLayout}; @@ -132,11 +134,22 @@ pub fn restore( rows: u16, cols: u16, events: mpsc::Sender, + render_notify: Arc, + render_dirty: Arc, ) -> Vec { snapshot .workspaces .iter() - .filter_map(|ws_snap| restore_workspace(ws_snap, rows, cols, events.clone())) + .filter_map(|ws_snap| { + restore_workspace( + ws_snap, + rows, + cols, + events.clone(), + render_notify.clone(), + render_dirty.clone(), + ) + }) .collect() } @@ -145,6 +158,8 @@ fn restore_workspace( rows: u16, cols: u16, events: mpsc::Sender, + render_notify: Arc, + render_dirty: Arc, ) -> Option { let (node, id_map) = restore_node_remapped(&snap.layout); let pane_ids = collect_pane_ids(&node); @@ -169,7 +184,15 @@ fn restore_workspace( .map(|p| p.cwd.clone()) .unwrap_or_else(|| std::env::current_dir().unwrap_or_else(|_| "/".into())); - match PaneRuntime::spawn(*id, rows, cols, cwd, events.clone()) { + match PaneRuntime::spawn( + *id, + rows, + cols, + cwd, + events.clone(), + render_notify.clone(), + render_dirty.clone(), + ) { Ok(runtime) => { panes.insert(*id, PaneState::new()); runtimes.insert(*id, runtime); @@ -205,6 +228,8 @@ fn restore_workspace( runtimes, zoomed: snap.zoomed, events, + render_notify, + render_dirty, }) } -- cgit v1.2.3